첫 번째 입력 매개변수에서 폴더 경로에 액세스하는 방법과 배치 파일에서 IF 루프를 호출하는 방법은 무엇입니까?

첫 번째 입력 매개변수에서 폴더 경로에 액세스하는 방법과 배치 파일에서 IF 루프를 호출하는 방법은 무엇입니까?
@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

**test.bat에 위의 코드를 배치하고 아래에 언급된 매개변수를 전달했습니다.

C:\Users\ak813708>C:\Users\abhay\Desktop\test1.bat
C:\Users\abhay\Desktop\doc1.zip C:\Users\abhay\Desktop\header.txt 그러나 첫 번째 매개변수 파일과 관계없음 호출 function2를 입력합니다.**

답변1

%~dp따라서 연산자만 사용하는 대신 연산자를 사용하는 것이 좋습니다 %~p. 파일 연산자의 전체 목록과 이를 사용하는 방법을 보려면 FOR /?명령줄에서 사용하세요. 해당 섹션의 맨 끝에 있습니다.

아래와 같은 코드는 명령줄 파일 이름을 허용하는 방법에 약간의 유연성을 제공하는 보다 예측 가능한 코드를 제공합니다.

@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

답변2

명령줄 매개변수를 제공하는 파일 확장자를 어떻게 얻을 수 있나요?

다음을 사용하여 파일 확장자를 얻을 수 있습니다.

%~x1- %1파일 확장자로만 확장합니다.

따라서 다음과 같은 것을 사용할 수 있습니다.

SET Extension=%~x1

...

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

추가 읽기

답변3

@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

내 배치를 다음과 같이 수정했습니다. 이제 원격 서버와 로컬 데스크톱 경로가 모두 처리되고 IF 문이 완벽하게 작동합니다.

관련 정보