最初の入力パラメータからフォルダ パスにアクセスする方法と、バッチ ファイルで 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ステートメントも完全に機能するようになりました

関連情報