使用这个批处理文件我想要压缩一些* .txt文件。每个* .txt文件都在自己的zip文件中。不幸的是它不起作用,我得到输出
ECHO is disabled (OFF).
几次。这是源代码:
@echo off
setlocal EnableDelayedExpansion
for %%i in (*.txt) do (
set filename = %%i
set filenametrunc = %filename:~0,10%
7z a -tzip -mx0 %zipname%
echo %filename% zipped.
)
我阅读了有关EnableDelayedExpansion的内容并将其激活。虽然无法让它发挥作用。
任何帮助表示感谢。
答案 0 :(得分:6)
您需要使用SetLocal EnableDelayedExpansion
并在!
中包装变量。另外,不要在变量名,等号和值之间放置空格。
set filename = ...
创建一个名为%filename %
的变量,其值为 ...
set filename=.....
生成一个名为%filename%
的变量,其值为.....
@echo off
setlocal EnableDelayedExpansion
for %%i in (*.txt) do (
set filename=%%i
set filenametrunc=!filename:~0,10!
7z a -tzip -mx0 !zipname!
echo !filename! zipped.
)
括号内的%
中的变量同时被评估,在整个循环开始执行之前 。您之前的代码将在set
语句运行之前扩展所有变量。
答案 1 :(得分:4)
您需要初始化变量zipname
并使用!
字符而不是%
字符展开var。
阅读HELP SET
,特别是
延迟环境变量扩展允许您使用不同的 用于扩展环境变量的字符(感叹号) 执行时间处理时间。
并将您的代码更改为
@echo off
setlocal EnableDelayedExpansion
for %%i in (*.txt) do (
set zipname=%%i
7z a -tzip -mx0 !zipname!
echo !zipname! zipped.
)
答案 2 :(得分:3)
如果需要访问在循环内分配的变量,则只需在循环内进行延迟扩展。但在你的情况下没有必要。
您需要先获得正确的7z语法。您的原始代码试图将当前目录中的所有文件放入单个zip文件中,因为您没有指定文件名。您的ZIPNAME也未初始化。你需要以下内容。
7z a -tzip zipname filename
我认为你希望zip的名称与原始文件名相同,除了.zip前缀而不是.txt。然后你需要的是~n修饰符,它给出没有前缀的基本名称。 7-Zip将自动附加.zip扩展名。
for %%i in (*.txt) do 7z a -tzip %%~ni %%i
如果需要,可以添加-mx0选项,该选项不进行压缩。我无法想象为什么你会为文本文件这样做。
for %%i in (*.txt) do 7z a -mx0 -tzip %%~ni %%i
如果您想添加自己的消息
for %%i in (*.txt) do (
7z a -mx0 -tzip %%~ni %%i
echo %%i zipped into %%~ni.zip
)