为什么这个剧本说Echo是关闭的?

时间:2017-11-03 21:44:40

标签: windows batch-file

此代码应该将文件的内容设置为变量,但不起作用。请注意,我在脚本的顶部有SETLOCAL EnableDelayedExpansion

for /f "delims=" %%i in ('out.txt') do set duh=!duh! %ii
echo %duh% > Displaynames\Name.txt

for /f "delims=" %%i in ('out.txt') do set duh=%duh% %ii
echo %duh% > Displaynames\Name.txt

不行。 Displaynames\Name.txt读取ECHO is off.

知道我做错了什么?谢谢!

3 个答案:

答案 0 :(得分:1)

该消息是因为%duh%未定义,即它尚未设置为任何内容。 原因是您在括号内使用了单引号

这是否能满足您的需求:

Set "duh="
For /F "UseBackQ Delims=" %%A In ("out.txt") Do Set "duh=!duh! %%A"
>"Displaynames\Name.txt" Echo %duh:~1%

修改

经过反思,我发现您的out.txt文件可能只包含一行,可能只包含一个单词,例如Jen

如果是这种情况,那么将文件的第一行设置为变量的类似内容将是一个很大的改进:

Set/P "duh="<"out.txt"
>"Displaynames\Name.txt" Echo %duh%

答案 1 :(得分:0)

检查语法。它是for /f .... in ('command') do ...
你试图执行 out.txt(它没有给你任何反馈),所以你什么也得不回来。
要验证,请尝试:

for /f "delims=" %%a in ('echo hello') do echo %%a

您(可能)想要的是获取文件的内容。语法是:

for /f "delims=" %%a in (file.txt) do echo %%a

由于文件名可以包含空格,因此引用它更好:

for /f "usebackq delims=" %%a in ("file.txt") do echo %%a

注意:在其他一些语言中,您既可以使用单引号',也可以使用双引号"。在批处理中,只有双引号"。这里的单引号是for的特殊内容,告诉它,它应该执行,内部是什么。

答案 2 :(得分:-2)

我不确定问题是什么,但对于其他人我发现这个脚本有效:

set cmd="type out.txt"
FOR /F "tokens=*" %%i IN (' %cmd% ') DO SET X=%%i
setlocal enabledelayedexpansion
for /f "tokens=* delims= " %%a in ("%x%") do set x=%%a
for /l %%a in (1,1,100) do if "!x:~-1!"==" " set 
x=!x:~0,-1!
echo %x% > Displaynames\Name.txt

感谢所有帮助过的人,抱歉,我无法分享整个脚本。 编辑:我改变了这个,以便它删除额外的空间。