Batch file 如何使用批处理文件在多个可执行文件之间循环以压缩它们(.7z)并重命名文件以避免“重复”;。exe.7z“;
我正在尝试使用批处理文件一次性压缩27个exe文件。此文件的目的是为修改后的HBCD菜单创建.7z文件。此文件位于…\Documents\CD\HBCD\Programs中。exe文件位于…\Documents\CD\HBCD\Programs\files\SysinternalsSuite中 我不断得到:Batch file 如何使用批处理文件在多个可执行文件之间循环以压缩它们(.7z)并重命名文件以避免“重复”;。exe.7z“;,batch-file,cmd,zip,7zip,Batch File,Cmd,Zip,7zip,我正在尝试使用批处理文件一次性压缩27个exe文件。此文件的目的是为修改后的HBCD菜单创建.7z文件。此文件位于…\Documents\CD\HBCD\Programs中。exe文件位于…\Documents\CD\HBCD\Programs\files\SysinternalsSuite中 我不断得到: Error: Incorrect command line 我一直在四处寻找,尝试不同的东西,但我无法让它发挥作用 文件名:7zBatch.bat 一旦到达7压缩线,就会给出错误。我意识到
Error:
Incorrect command line
我一直在四处寻找,尝试不同的东西,但我无法让它发挥作用
文件名:7zBatch.bat
一旦到达7压缩线,就会给出错误。我意识到nfname变量为空,因此我尝试:
set nfname=!%%G:.exe=!
这不起作用,所以我尝试删除它并使用:
..\..\7z.exe a -t7z !fname:.exe=!.7z "!fname!" -mx5 -sdel -oC:%DEST%
这不起作用,所以我试着把不同的东西一个接一个地引用起来,然后所有的东西都引用起来:
"..\..\7z.exe" a -t7z "!fname:.exe=!.7z" "!fname!" -mx5 -sdel -oC:"%DEST%"
还是没什么。我错过了什么
@echo off
SETLOCAL
echo "-------------------------------------------------"
echo "||======== BATCH ZIPPER (.7z) for HBCD ========||"
echo "-------------------------------------------------"
:AskSource
echo Enter the location of the exe file(s)
set "SOURCE="
set /p "SOURCE=>>"
echo "%SOURCE%", is that correct
:ConfirmSource
echo (Y)es or (N)o?
set "INPUT="
set /p "INPUT=>>"
if /I "%INPUT%"=="y" goto AskDest
if /I "%INPUT%"=="n" goto AskSource
echo Incorrect input, is the location correct?
goto ConfirmSource
:AskDest
echo Enter the location of the zip file(s)
set "DEST="
set /p "DEST=>>"
echo "%DEST%", is that correct
:ConfirmDest
echo (Y)es or (N)o?
set "INPUT="
set /p "INPUT=>>"
if /I "%INPUT%"=="y" goto Execute
if /I "%INPUT%"=="n" goto AskDest
echo Incorrect input, is the location correct?
goto ConfirmDest
:Execute
FOR %%G IN ("%SOURCE%\*.exe") DO (
"%~dp0..\..\7z.exe" a -t7z "%DEST%\%%~nG.7z" "%%~fG" -mx5 -sdel
)
ENDLOCAL
echo.
pause
已删除pushd
和cd
。不确定为什么会使用7z.exe
位于输入可执行文件所在的2个目录上
目录位于7z.exe现在位于2个目录中
从脚本目录向上
7z.exe的-o
开关仅用于提取
在帮助文件中提到,因此省略
双引号设置变量
,以避免任何尾随空格
for
循环在给出文件时更改为简单类型
不需要使用dir
的路径
EnableDelayedExpansion
作为变量的删除
使用修饰符获取完整路径、名称、驱动器等。请参阅
获取/?
关于可用的修改器
已删除timeout
,因为如果使用标准输入法,它会抱怨,请参阅
没有理由将其用于此任务
删除了转到下一行的过时的goto
命令
使用命令。试试。我不知道您的问题是什么,但我强烈建议您打开命令提示符并键入:以获取/?
。阅读最后一节,了解可与FOR
变量一起使用的修饰符。
@echo off
SETLOCAL
echo "-------------------------------------------------"
echo "||======== BATCH ZIPPER (.7z) for HBCD ========||"
echo "-------------------------------------------------"
:AskSource
echo Enter the location of the exe file(s)
set "SOURCE="
set /p "SOURCE=>>"
echo "%SOURCE%", is that correct
:ConfirmSource
echo (Y)es or (N)o?
set "INPUT="
set /p "INPUT=>>"
if /I "%INPUT%"=="y" goto AskDest
if /I "%INPUT%"=="n" goto AskSource
echo Incorrect input, is the location correct?
goto ConfirmSource
:AskDest
echo Enter the location of the zip file(s)
set "DEST="
set /p "DEST=>>"
echo "%DEST%", is that correct
:ConfirmDest
echo (Y)es or (N)o?
set "INPUT="
set /p "INPUT=>>"
if /I "%INPUT%"=="y" goto Execute
if /I "%INPUT%"=="n" goto AskDest
echo Incorrect input, is the location correct?
goto ConfirmDest
:Execute
FOR %%G IN ("%SOURCE%\*.exe") DO (
"%~dp0..\..\7z.exe" a -t7z "%DEST%\%%~nG.7z" "%%~fG" -mx5 -sdel
)
ENDLOCAL
echo.
pause