@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
参考文献
- コマンドライン引数(パラメータ)
- Windows CMD コマンドラインの AZ インデックス- Windows コマンド ラインに関連するあらゆることに関する優れたリファレンス。
答え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ステートメントも完全に機能するようになりました