Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 为什么子字符串不起作用?_Loops_Batch File_For Loop_Substring - Fatal编程技术网

Loops 为什么子字符串不起作用?

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

使用这个批处理文件,我想压缩一些*.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的文章并激活了它。但还是不能让它工作


非常感谢您的帮助。

您需要使用
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”(在=”周围不能有空格)