将批处理文件(.bat文件)中的值返回到文本文件

时间:2009-04-10 08:57:36

标签: windows batch-file

我有一个.bat文件,如下所示

@echo off 
for /f "delims=" %%a in ('C:\MyProj\Sources\SearchString.vbs') do (
set ScriptOut=%%a)
#echo Script Result = %ScriptOut%
echo %ScriptOut% >C:\ThreePartition\Sources\myfile.txt

我希望将输出变量ScriptOut存储到文本文件中。 任何人都可以建议将任何方法添加到我现有的批处理文件中。

由于 麦迪

2 个答案:

答案 0 :(得分:2)

我是否正确理解您的文件被覆盖并希望附加?如果是这样,试试这个:

echo %ScriptOut% >> C:\ThreePartition\Sources\myfile.txt

(请注意双“>>”)

答案 1 :(得分:2)

您拥有的for循环执行该脚本并为脚本返回的每一行运行。基本上这意味着您的环境变量%ScriptOut%仅包含输出的 last 行(因为每次循环处理另一行时它都会被覆盖)。所以如果你的脚本返回

a
b
c

然后%ScriptOut%将只包含c。如果最后一行为空或仅包含空格,则iot将有效删除%ScriptOut%,这就是为什么当你做

echo %ScriptOut%

你只会获得ECHO is on.,因为在变量替换后,所有剩下的都是echo。你可以使用

回波。%ScriptOut%

在这种情况下,您将获得一个空行(这将是%ScriptOut%包含的那一行。

如果要打印脚本返回文件的每一行,那么只需执行

即可轻松完成
cscript C:\MyProj\Sources\SearchString.vbs > C:\ThreePartition\Sources\myfile.txt
如果您希望将输出作为Stanislav Kniazev pointed out附加到文件,请

或使用>>进行重定向。

如果您只想存储最后一个非空行,那么以下内容可能会有效:

for /f "delims=" %%a in ('C:\MyProj\Sources\SearchString.vbs') do (
  if not "%%a"=="" set ScriptOut=%%a
)

只有在循环变量不为空时才会设置%ScriptOut%