我正尝试使用批处理文件一次性压缩27个exe文件。该文件的目的是为修改后的HBCD菜单创建.7z文件。该文件位于... \ Documents \ CD \ HBCD \ Programs exe文件位于... \ Documents \ CD \ HBCD \ Programs \ Files \ SysinternalsSuite
我不断得到:
Error:
Incorrect command line
我一直在搜索并尝试不同的方法,但是我无法使其正常工作。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
pushd "%~dp0"
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 & goto ConfirmSource
: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
cd %SOURCE%
echo Enter the location of the zip file(s)
set DEST=
set /p DEST=">>" %=%
echo "%DEST%", is that correct & goto ConfirmDest
: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 /f "tokens=*" %%G IN ('dir /b *.exe') DO (
set fname=%%G
set nfname=!fname:.exe=!
echo.
echo Found: !fname!
..\..\7z.exe a -t7z !nfname!.7z "!fname!" -mx5 -sdel -oC:%DEST%
timeout /t 10 /nobreak
)
ENDLOCAL
echo.
pause
一旦到达7 Zip行,它将给出错误。我意识到 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%"
什么都没有。我想念什么?
答案 0 :(得分:0)
@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个目录中
从脚本目录开始。
-o
的{{1}}开关仅用于提取
在帮助文件中提到过,因此省略。
对变量7z.exe
进行双引号,以避免出现尾随空格。
set
循环更改为简单类型,因为它提供了文件
不需要使用for
的路径。
dir
被删除为EnableDelayedExpansion
变量
使用修饰符获取全路径,名称,驱动器等。请参见
for
关于可用的修饰符。
已删除for /?
,因为它抱怨是否使用了stdin并查看
没有理由将其用于此任务。
删除了移至下一行的过时timeout
命令
用命令。