管道输出变量的Windows批处理

时间:2014-04-14 14:51:08

标签: windows batch-file pipeline

如何获取myVar属性的值以在代码的其他部分中使用。

set myVar =
ECHO "httpsxxxxxx_cmidxxxxx_2014-04-12_14-54-53_abc3654.xml" | find /i "2014-04-12" | (set /p myVar= & set myVar)
ECHO myvar "%myVar%" /**** This is empty String**********/

3 个答案:

答案 0 :(得分:0)

试试这样:

@echo off
for /f "delims=" %%a in ('ECHO "httpsxxxxxx_cmidxxxxx_2014-04-12_14-54-53_abc3654.xml" ^| find /i "2014-04-12"') do set MyVar=%%a

echo %MyVar%

我不理解你想要做什么。

但假设您正在查找目录中包含字符串.xml的{​​{1}}文件。代码将是:

"2014-04-12"

答案 1 :(得分:0)

注释您的代码:

1: set myVar =
2: ECHO "httpsxxxxxx_cmidxxxxx_2014-04-12_14-54-53_abc3654.xml" | find /i "2014-04-12" | (set /p myVar= & set myVar)
3: ECHO myvar "%myVar%" /**** This is empty String**********/

在第1行:,myVar=之间有一个空格。这是不正确的。 CMD.EXE认为有一个名为"myVar "的变量。将其更改为"myVar"。 在第2行:我想您打算使用TYPE输出文件" httpsxxxxxx_cmidxxxxx_2014-04-12_14-54-53_abc3654.xml"。在任何情况下,你都可以写这个,而不是:

FIND /I "2014-04-12" httpsxxxxxx_cmidxxxxx_2014-04-12_14-54-53_abc3654.xml

答案 2 :(得分:0)

也许你问的是:

这一行

echo "someValue" | find /i "Value" | (set /p myVar= & set myVar)

将显示已设置的变量。 echo命令将其输出发送到find命令,并将其输出传送到set /p,将值赋给变量,set将显示的值安慰。

然后是以下一行

echo myvar "%myVar%"

显示没有数据。为什么?

cmd找到管道定义时,数据从一个程序流向另一个程序,管道中的每个元素都是一个单独的进程,其中包含自己的副本的环境块父进程(批处理文件正在运行),因此set /p myVar= & set myVar未在与批处理文件相同的实例中运行。该变量在另一个进程中设置,并且当更改在环境副本中进行时,它们在父进程中不可见。