我有一个.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存储到文本文件中。 任何人都可以建议将任何方法添加到我现有的批处理文件中。
由于 麦迪
答案 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%
。