如何在windows中的变量中获得命令的结果?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (8)

我期待在Windows批处理脚本中获得命令的结果作为变量(请参阅如何在bash中为bash脚本等效获取命令的结果)。一个能在.bat文件中工作的解决方案是首选,但也欢迎其他常见的Windows脚本解决方案。

提问于
用户回答回答于

如果必须捕获所有命令输出,可以使用这样的批处理:

@ECHO OFF
IF NOT "%1"=="" GOTO ADDV
SET VAR=
FOR /F %%I IN ('DIR *.TXT /B /O:D') DO CALL %0 %%I
SET VAR
GOTO END

:ADDV
SET VAR=%VAR%!%1

:END

所有输出行都存储在VAR中,用“!”分隔。

用户回答回答于

D:\> FOR /F "delims=" %i IN ('date /t') DO set today=%i
D:\> echo %today%
Sat 20/09/2008

请注意,将"delims="覆盖默认空间和制表符分隔符,以便date命令的输出一次全部被捕获。

为了捕获多行输出,它可以基本上是一行(在结果变量中使用变量lf作为分隔符):

REM NB:in a batch file, need to use %%i not %i
setlocal EnableDelayedExpansion
SET lf=-
FOR /F "delims=" %%i IN ('dir \ /b') DO if ("!out!"=="") (set out=%%i) else (set out=!out!%lf%%%i)
ECHO %out%

要捕捉管道表达式,请使用^|

FOR /F "delims=" %%i IN ('svn info . ^| findstr "Root:"') DO set "URL=%%i"

扫码关注云+社区