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

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 coloquei o código acima no 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, mas independentemente do seu primeiro arquivo de parâmetro digite sua função de chamada2. **

abhayk
fonte
2
"se eu estiver passando E: \ testing \ appserver_output.dat, ele deve chamar Function2 e se eu estiver passando E: \ testing \ appserver_output.zip, deve chamar apenas a função 1" - Então, basicamente, você deseja ramificar apenas com base de extensão?
Karan
Você pode obter a extensão do arquivo com %~x1- Expandir %1para um arquivo somente
eXtension
@Karan: sim. mas no código acima, estou tentando chamar funções baseadas em If, mas não está funcionando.
abhayk
@DavidPostill: graças .. agora o seu pleno prova e mais fácil como anteriormente eu estava pensando em encontrar substring ".zip" no FilePath
abhayk
Era sobre isso que eu estava perguntando. Se for um caso simples de ramificação de acordo com a extensão, for /?dirá o que% ~ xI faz.
Karan

Respostas:

1

Então, eu encorajo você a usar o %~dpoperador, em vez de apenas o %~poperador. Para obter uma lista completa dos operadores de arquivos e como usá-los, use FOR /?na linha de comando - está no final da seção.

Algo como o abaixo deve fornecer um código mais previsível, que oferece 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
ice13berg
fonte
Se eu passar E: \ abhay \ test \ output1.dat então o seu dom \ abhay \ test \ em vez de E: \ abhay \ test ..
abhayk
11
Então, fazer as alterações na minha resposta não produziu alteração na saída?
ice13berg
ice13berg: o seu trabalho agora ... obrigado .... mas ainda IF loop está dando erro
abhayk
@abhayk Por favor edite sua pergunta para incluir o código mais recente que está a utilizar e qual iferro que você está começando agora ...
DavidPostill
@ DavidPostill: Eu atualizei meu código. Mas cada vez que a sua única função chamando 2
abhayk
1

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

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

%~x1- Expanda apenas %1para um arquivo de extensão.

Então você pode usar algo como:

SET Extension=%~x1

...

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

Leitura adicional

DavidPostill
fonte
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

Modifiquei meu lote para este fim ... Agora, tanto o servidor remoto quanto os caminhos da área de trabalho local estão sendo processados ​​e a instrução IF está funcionando perfeitamente

abhayk
fonte
Acho que respondi suas perguntas, originalmente sobre caminhos e a declaração IF. Provavelmente, seu script estava executando as duas funções, não apenas a função 2, porque quando um arquivo '.zip' foi processado, a função 1 foi chamada, mas nenhum código de retorno foi enviado (e o script não saiu); portanto, ele executou a função 2. Você goto :eofresolve isso. A melhor solução seria a de returnum código, uma vez que você chamar a função ( call : sube, em seguida, ter um imediato EXIT /b.
ice13berg