如何從第一個輸入參數存取資料夾路徑以及如何在批次檔中呼叫 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 但無論其第一個參數文件如何輸入其呼叫函數2.**

答案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 語句工作正常

相關內容