繁体   English   中英

用于管道输出变量的 Windows 批处理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM