如何在批处理中将变量设置为for循环的输出

时间:2015-07-19 18:08:02

标签: batch-file for-loop

我正在阅读文本文件%tmp%\ tmp.txt。我试图找到一个具有给定字符串的行(在此示例中为“RemotePath”),并将变量netdrive设置为该行(如果找到)。这是我的代码:

for /f "tokens=*" %%a in (%tmp%\tmp.txt) do echo.%%a|findstr /C:"RemotePath " >nul 2>&1 && set netdrive=%%a

它永远不会将netdrive设置为任何内容,但是当我将set netdrive=%%a更改为echo %%a >> netdrive.txt时,我想要的文本会出现在文本文件中。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您似乎反复从输入文件为每个netdrive设置token findstr的输出。最后的赋值可能会从文件末尾给它一个空值。要从findstr的输出中分配,请参见此处:How do I get the result of a command in a variable in windows?

答案 1 :(得分:0)

for /f "tokens=*" %%a in ('findstr /C:"RemotePath " "%tmp%\tmp.txt"') do set "netdrive=%%a"

"问题"使用原始代码是管道的每一侧都在一个单独的进程中执行,因此,在您的情况下,set命令在另一个cmd实例中运行,并且该变量在此单独的实例中设置,而不是在运行批处理文件的实例中。