There is a working script
echo "--------START PREPARE----------" reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT if %OS%==32BIT set pkzippath="%ProgramFiles%\PKWARE\PKZIPC\pkzipc.exe" if %OS%==64BIT set pkzippath="%ProgramFiles(x86)%\PKWARE\PKZIPC\pkzipc.exe" set filenamedate=%date:~-4%-%date:~3,2%-%date:~0,2% for %%a in (%8) do set newfilename=%%~da%%~pa%%~na_%filenamedate%%%~xa for %%a in (%9) do set pDIR=%%~sa for %%a in (%pDIR%) do set pDIR2=%%~pa for %%a in (%pDIR2:~0,-1%) do set pPN=%%~na echo "--------DONE PREPARE-----------" echo "--------START ARCHIVING--------" %pkzippath% %1=%2 %3=%4 %5 %6=%7 %newfilename% %9 echo "--------ARCHIVING DONE---------" echo "--------COPY TO DRIVE----------" echo "PROJECT NAME: %pPN%" echo "ARCH NAME: %newfilename%" echo "DESTINATION: ХХХХХХХХХ" echo "LOGIN: %login% PASSWORD:%passw%" net use O: \\10.ХХ.ХХ.ХХ\diskW /user:ХХХХ\%login% %passw% xcopy %newfilename% "O:\ХХХХХХХХХ\%pPN%\" /Y net use O: /delete /Y echo "--------COPY DRIVE DONE--------" There are no problems with his work. But only I wrap it in the IF block , the part with the change of the file name and getting the folder name stops working.
for %%a in (%8) do set newfilename=%%~da%%~pa%%~na_%filenamedate%%%~xa for %%a in (%9) do set pDIR=%%~sa for %%a in (%pDIR%) do set pDIR2=%%~pa for %%a in (%pDIR2:~0,-1%) do set pPN=%%~na These variables are just empty. Why? Is there another way to get the file name, extension, last folder from the path for individual variables?
Here is an example of the parameters passed to the bat file:
-attributes=all -mask=none -add -directories=current "P:tests\sg.zip" "sg\*.*" PS An example of how to wrap an IF block:
echo "--------START PREPARE----------" reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT if %OS%==32BIT set pkzippath="%ProgramFiles%\PKWARE\PKZIPC\pkzipc.exe" if %OS%==64BIT set pkzippath="%ProgramFiles(x86)%\PKWARE\PKZIPC\pkzipc.exe" set filenamedate=%date:~-4%-%date:~3,2%-%date:~0,2% if %5 == -add ( for %%a in (%8) do set newfilename=%%~da%%~pa%%~na_%filenamedate%%%~xa for %%a in (%9) do set pDIR=%%~sa for %%a in (%pDIR%) do set pDIR2=%%~pa for %%a in (%pDIR2:~0,-1%) do set pPN=%%~na echo "--------DONE PREPARE-----------" echo "--------START ARCHIVING--------" %pkzippath% %1=%2 %3=%4 %5 %6=%7 %newfilename% %9 echo "--------ARCHIVING DONE---------" echo "--------COPY TO DRIVE----------" echo "PROJECT NAME: %pPN%" echo "ARCH NAME: %newfilename%" echo "DESTINATION: ХХХХХХХХХ" echo "LOGIN: %login% PASSWORD:%passw%" net use O: \\10.ХХ.ХХ.ХХ\diskW /user:ХХХХ\%login% %passw% xcopy %newfilename% "O:\ХХХХХХХХХ\%pPN%\" /Y net use O: /delete /Y echo "--------COPY DRIVE DONE--------" )
IF NOT %5 == -add GOTO метка, and place the label after the block accordingly. - Akina