Loops 为什么子字符串不起作用?
使用这个批处理文件,我想压缩一些*.txt文件。每个*.txt文件都有自己的zip文件。不幸的是,它不工作,我得到作为输出Loops 为什么子字符串不起作用?,loops,batch-file,for-loop,substring,Loops,Batch File,For Loop,Substring,使用这个批处理文件,我想压缩一些*.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
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的文章并激活了它。但还是不能让它工作
非常感谢您的帮助。您需要使用
SetLocal EnableDelayedExpansion
并在中包装变量代码>。另外,不要在变量名、等于和值之间加空格
设置文件名=…
使名为%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
语句之前展开所有变量。您需要初始化变量zipname
,并使用展开变量代码>字符而不是%
字符
具体阅读帮助集
延迟环境变量扩展允许您使用不同的
字符(感叹号)以在以下位置展开环境变量:
执行时间
并将代码更改为
@echo off
setlocal EnableDelayedExpansion
for %%i in (*.txt) do (
set zipname=%%i
7z a -tzip -mx0 !zipname!
echo !zipname! zipped.
)
只有在需要访问在循环内分配的变量时,才需要在循环内进行延迟扩展。但是你的情况没有必要
您需要首先获得正确的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
)
错误:“set a=%%i”正确:“set a=%%i”(在=”周围不能有空格)