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. **


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

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


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.