首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在windows中获取变量中命令的结果?

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

Stack Overflow用户
提问于 2008-09-20 15:13:29
回答 9查看 294.4K关注 0票数 162

我希望在Windows批处理脚本中以变量的形式获得命令的结果(参见how to get the result of a command in bash中与bash脚本等效的内容)。可以在.bat文件中工作的解决方案是首选的,但也欢迎其他常用的windows脚本解决方案。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2008-09-20 16:23:21

如果您必须捕获所有命令输出,则可以使用如下批处理:

代码语言:javascript
复制
@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中,用"!“分隔。

但是,如果只需要一行控制台输出,请尝试:

代码语言:javascript
复制
@ECHO off
@SET MY_VAR=
FOR /F %%I IN ('npm prefix') DO @SET "MY_VAR=%%I"

@REM Do something with MY_VAR variable...

@John:这个有什么实际用途吗?我认为你应该看看PowerShell或任何其他能够轻松执行脚本任务的编程语言(Python.perl.php.ruby)

票数 40
EN

Stack Overflow用户

发布于 2008-09-20 15:39:23

要获取当前目录,可以使用以下命令:

代码语言:javascript
复制
CD > tmpFile
SET /p myvar= < tmpFile
DEL tmpFile
echo test: %myvar%

虽然它使用的是临时文件,所以它不是最漂亮的,但它确实可以工作!‘'CD’将当前目录放在' tmpFile‘中,'SET’加载tmpFile的内容。

以下是使用“array‘s”的多行问题的解决方案:

代码语言:javascript
复制
@echo off

rem ---------
rem Obtain line numbers from the file
rem ---------

rem This is the file that is being read: You can replace this with %1 for dynamic behaviour or replace it with some command like the first example i gave with the 'CD' command.
set _readfile=test.txt

for /f "usebackq tokens=2 delims=:" %%a in (`find /c /v "" %_readfile%`) do set _max=%%a
set /a _max+=1
set _i=0
set _filename=temp.dat

rem ---------
rem Make the list
rem ---------

:makeList
find /n /v "" %_readfile% >%_filename%

rem ---------
rem Read the list
rem ---------

:readList
if %_i%==%_max% goto printList

rem ---------
rem Read the lines into the array
rem ---------
for /f "usebackq delims=] tokens=2" %%a in (`findstr /r "\[%_i%]" %_filename%`) do set _data%_i%=%%a
set /a _i+=1
goto readList

:printList
del %_filename%
set _i=1
:printMore
if %_i%==%_max% goto finished
set _data%_i%
set /a _i+=1
goto printMore

:finished

但是您可能想要考虑转移到另一个更强大的shell,或者为这个东西创建一个应用程序。它大大扩展了批处理文件的可能性。

票数 27
EN

Stack Overflow用户

发布于 2008-09-20 15:27:46

在"V“环境变量中设置最新文件的示例

代码语言:javascript
复制
FOR /F %I IN ('DIR *.* /O:D /B') DO SET V=%I

在批处理文件中,您必须在循环变量中使用双前缀:

代码语言:javascript
复制
FOR /F %%I IN ('DIR *.* /O:D /B') DO SET V=%%I
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/108439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档