[英]Windows Batch for Pipe out Variable
如何获取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**********/
也许你要问的是:
这条线
echo "someValue" | find /i "Value" | (set /p myVar= & set myVar)
将显示变量已设置。 echo
命令发送其输出到find
的命令,它的输出传送到set /p
,分配值给变量,值,该set
将在控制台显示。
然后下面一行
echo myvar "%myVar%"
显示没有数据。 为什么?
当cmd
找到管道定义时,数据从一个程序流向另一个程序,管道中的每个元素都是一个单独的进程,拥有自己的父进程(运行批处理文件的)环境块的副本,因此set /p myVar= & set myVar
不在与批处理文件相同的实例中运行。 该变量是在另一个进程中设置的,并且由于更改是在环境的副本中进行的,因此它们在父进程中是不可见的。
像这样尝试:
@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%
我不明白你想做什么。
但假设您正在寻找一个在目录中包含字符串"2014-04-12"
的.xml
文件。 代码将是:
@echo off
for /f "delims=" %%a in ('dir /b/a-d *.xml ^| find /i "2014-04-12"') do set MyVar=%%a
注释您的代码:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.