我使用以下脚本在屏幕上显示一些数据,使用一个小的CMD文件:
@echo off
set description=%1
ver
date /t
time /t
echo %description%
这提供了输出,类似于:
Microsoft Windows [Version 6.1.7601]
ma 08/12/2014
17:00
sometext
但是,我希望得到这个输出:
Microsoft Windows [Version 6.1.7601] [ma 08/12/2014 17:00] sometext
我无法想到轻松编码(不包括变量和/或临时文件)来实现类似的功能。是否有可能以简单的方式(比如在Linux / Unix上使用反引号)?怎么样?
作为奖励,如果一行不以返回字符结尾会更好。这样,我可以使用ECHO向文件中添加其他文本(也以1行格式)。知道ECHO本身最终会增加回报。我知道我可以使用Cygwin的PRINTF做到这一点,但如果可能的话我想避免使用Cygwin,并使用标准的CMD。
编辑:将问题更改为包含" ver"命令使其匹配标题:实际命令的输出,转换为1行
答案 0 :(得分:1)
@echo off
set myVar=
set description=%1
for /F "delims=" %%I in ('ver') do (set myVar=%%I)
for /F "delims=" %%I in ('date /t') do (set myVar=%myVar% %%I)
for /F "delims=" %%I in ('time /t') do (set myVar=[%myVar% %%I])
set myVar=%myVar% %description%
echo %myVar%
How do I get the result of a command in a variable in windows?
答案 1 :(得分:1)
没有临时文件,没有可见的辅助变量(参见%xyz%
子程序中正式使用的:echo
变量没有变化。很容易将echo anything
更改为call :echo anything
@ECHO OFF >NUL
:: unrem next line to see no change
:: set "xyz=XYZ"
Call :echo %time%
Call :echo after 5 secs
ping 1.1.1.1 -n 1 -w 5000 > nul
Call :echo %time%
Call :echo another 5 secs
ping 1.1.1.1 -n 1 -w 5000 > nul
Call :echo %time%
:: add new line in next ECHO. command
echo.
:: ensure variable xyz is not defined / changed
set xyz
:: and STDOUT command output
for /F "tokens=* delims=" %%G in ('ver /?') do call :echo %%G
for /F "tokens=* delims=" %%G in ('ver') do call :echo %%G
goto :eof
:echo
<nul (set/p xyz=%* )
goto :eof
并查看您的任务解决方案:
@ECHO OFF >NUL
for /F "tokens=* delims=" %%G in ('ver') do call :echo %%G
for /F "tokens=* delims=" %%G in ('date /t') do call :echo %%G
for /F "tokens=* delims=" %%G in ('time /t') do call :echo %%G
call :echo sometext
call :echo
goto :eof
:echo
if "%*"=="" echo.&goto :eof
<nul (set/p xyz=%* ) 2>NUL
goto :eof
在上一个代码片段中,遵循规则只有一个命令用于同一任务:echo.
替换为call:echo以添加新行到输出。但是,请echo ON
和echo OFF
分开......