Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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
Windows 为什么这个脚本说Echo关闭了?_Windows_Batch File - Fatal编程技术网

Windows 为什么这个脚本说Echo关闭了?

Windows 为什么这个脚本说Echo关闭了?,windows,batch-file,Windows,Batch File,这段代码应该将文件的内容设置为变量,但不起作用。请注意,我在脚本顶部有setlocalenabledayedexpansion for /f "delims=" %%i in ('out.txt') do set duh=!duh! %ii echo %duh% > Displaynames\Name.txt 及 不工作Displaynames\Name.txtreadsECHO关闭。 知道我做错了什么吗?谢谢 该消息是因为未定义%duh%,即未将其设置为任何值。原因是在括号内使用了单引

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

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

不工作
Displaynames\Name.txt
reads
ECHO关闭。


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

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

这是否能满足您的需求:

Set“duh=”
对于/F“UseBackQ Delims=“%%A In”(“out.txt”)请设置“duh=!duh!%%A”
>“Displaynames\Name.txt”回显%duh:~1%
编辑

经过思考,我想到您的
out.txt
文件可能只包含一行,也可能只包含一个单词,例如
Jen

如果是这样的话,那么像这样的东西,将文件的第一行设置为变量,将是一个巨大的改进:

Set/P“duh=”“Displaynames\Name.txt”Echo%duh%

检查语法。这是/f的
。。。。在(“命令”)中执行…

您试图执行
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

注意:在某些其他语言中,您可以使用单引号
或双引号
。在批处理中,只有双引号
。这里的单引号对于来说是一个特殊的东西,告诉它,它应该执行,里面有什么。

我不确定问题出在哪里,但对于其他人,我发现这个脚本起了作用:

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
感谢所有帮助我的人,很抱歉我不能分享整个剧本。
编辑:我更改了此选项,以便删除多余的空间。

您的问题有太多我不理解的地方。但是首先,您没有声明任何分隔符,您知道或者?
%ii
应该是
%i
@niCkcAMel-
“delims=“
是这样的,以便一次读入整行。默认情况下,
for/f
在空白处划界。您应该打开一个cmd提示符,至少阅读for命令帮助的前十几行。这对我不起作用,它在文本文件中回显“ii ii”。Out.txt的内容是Jen。我在我的答案中添加了一行,专门删除了所有定义的
%duh%
变量(因为编写不在
Out.txt
中的字符串的唯一方法是事先设置它)。我的脚本应该将
out.txt
空格中的每一行作为单行写入
Displaynames\Name.txt
。如果这不是你想做的,试着重新评估你的问题@MarkDodsons在说出“不起作用”之前,测试给出了答案。如果你得到的是
ii ii
,是因为你仍然在
%ii
中使用错误的代码,而不是测试这个答案。我犹豫是否与你共享整个代码,因为我计划稍后对代码进行版权保护。。。然而,我认为代码中存在干扰当前部分的内容。@Mark,我没有询问您的其他代码,但没有任何内容会干扰我的代码。您的代码中可能存在问题;例如
out.txt
为空,与当前目录无关,为unicode或不使用CRLF行结尾,并且
Displaynames
不是与当前目录相关的目录;但这些都不是我的错。由于你发布了你的答案,加上之前的内容,我意识到你可能试图做一些完全不同的事情,因此我用另一个选项对我的答案进行了编辑,我希望它能更好地反映你的意图。此代码输出
out.txt
的最后一行加上一个空格,(只要不包含有问题的字符),到
Displaynames\Name.txt
。询问或搜索“如何将文件的最后一行写入另一个文件”这不是一个太难的建议,也不会意味着透露您即将获得版权的代码!是的,我也发现了这一点,但该脚本不起作用,因此我使用了这一个。我也知道额外的空间,但这是我需要的。
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