Batch file 如何使用批处理文件在多个可执行文件之间循环以压缩它们(.7z)并重命名文件以避免“重复”;。exe.7z“;

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压缩线,就会给出错误。我意识到

我正在尝试使用批处理文件一次性压缩27个exe文件。此文件的目的是为修改后的HBCD菜单创建.7z文件。此文件位于…\Documents\CD\HBCD\Programs中。exe文件位于…\Documents\CD\HBCD\Programs\files\SysinternalsSuite中

我不断得到:

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