Como acessar o caminho da pasta do primeiro parâmetro de entrada e como chamar o IF Loop no arquivo de lote?

0
@Echo OFF

SET FilePath=%1

SET HeaderFilePath=%2

SET RetrunCode="0"

Call :sub %FilePath% exit /b

:sub SET FileName=%~n1


SET FilePath=%1

SET "FileType=.zip"

CALL SET "ZipType=%%FilePath:%FileType%=%%"

if "%Ext%"==".zip" (goto Function1) else Goto Function2

:Function1
 Echo  File is zipped

:Function2 
Echo File is not zipped

pause

** Eu tenho lugar acima do código em test.bat e passei abaixo do parâmetro mencionado

C:\Users\ak813708>C:\Users\abhay\Desktop\test1.bat
C:\Users\abhay\Desktop\doc1.zip C:\Users\abhay\Desktop\header.txt but regardless of its first parameter file type its calling function2.**

    
por abhayk 02.06.2015 / 07:41

3 respostas

1

Por isso, incentivo você a usar o operador %~dp , em vez de apenas o operador %~p . Para obter uma lista completa dos operadores de arquivos e como usá-los, use FOR /? na linha de comando - no final da seção.

Algo como o abaixo deve fornecer um código mais previsível que forneça um pouco de flexibilidade na maneira como você aceita nomes de arquivos de linha de comando.

@Echo OFF
SET File=%1
SET HeaderFilePath=%2
SET RetrunCode="0"
Call :sub %File%
exit /b

:sub 
SET FileName=%~n1
SET Ext=%~x1
SET PGPProcessPath=%~dp1
SET EncryptFile=%~fnx1
SET DecryptFile=%EncryptFile:_pgp=%
pause

if "%Ext%"==".zip" (goto Function1) else Goto Function2
    
por 02.06.2015 / 08:28
1

Como posso obter a extensão de arquivo como um parâmetro de linha de comando?

Você pode obter a extensão de arquivo usando:

%~x1 - Expanda %1 somente para um arquivo eXtension.

Então você pode usar algo como:

SET Extension=%~x1

...

If "%ZipType%"=="%Extension%" (goto Function1) else Goto Function2

Outras leituras

por 02.06.2015 / 08:16
0
@Echo OFF
SET File=%1
SET HeaderFilePath=%2
Call :sub %File%
exit /b
:sub 
SET FileName=%~n1
SET Ext=%~x1
SET PGPProcessPath=%~dp1
SET EncryptFile=%~fnx1
SET DecryptFile=%EncryptFile:_pgp=%
Echo extn is %Ext%
if "%Ext%"==".zip" (goto Function1) else Goto Function2
:Function1
echo this is function 1
goto :eof
:Function2
echo this is function2
goto :eof
:eof
Echo Process is completed
pause

Eu modifiquei o meu lote é assim ... Agora tanto o servidor remoto quanto os caminhos de desktop locais estão sendo processados, assim como a instrução IF está funcionando perfeitamente

    
por 03.06.2015 / 07:44