@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
дальнейшее чтение
- Аргументы командной строки (параметры)
- Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой 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 работает отлично