@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
** Coloqué el código anterior en test.bat y pasé el parámetro mencionado a continuación.
C:\Users\ak813708>C:\Users\abhay\Desktop\test1.bat
C:\Users\abhay\Desktop\doc1.zip C:\Users\abhay\Desktop\header.txt pero independientemente de su primer archivo de parámetros escriba su función de llamada2.**
Respuesta1
Por lo tanto, le recomiendo que utilice el %~dp
operador, en lugar de solo el %~p
operador. Para obtener una lista completa de los operadores de archivos y cómo usarlos, use FOR /?
en la línea de comando; se encuentra al final de la sección.
Algo como lo siguiente debería proporcionarle un código más predecible que proporcione un poco de flexibilidad en la forma de aceptar nombres de archivos de línea de comandos.
@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
Respuesta2
¿Cómo puedo obtener la extensión del archivo y dar un parámetro de línea de comando?
Puede obtener la extensión del archivo usando:
%~x1
- Expandir %1
solo a una extensión de archivo.
Entonces puedes usar algo como:
SET Extension=%~x1
...
If "%ZipType%"=="%Extension%" (goto Function1) else Goto Function2
Otras lecturas
- Argumentos de la línea de comando (parámetros)
- Un índice AZ de la línea de comando CMD de Windows- Una excelente referencia para todo lo relacionado con la línea cmd de Windows.
Respuesta3
@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
He modificado mi lote y es así... Ahora tanto las rutas del servidor remoto como las del escritorio local se están procesando y la declaración IF funciona perfectamente