2014-06-18 93 views
0

即时尝试将主机名命令的输出设置为变量时遇到困难。我想要做的是让输出的文本文件具有计算机的名称,例如computer1.txt,computer2.txt等,但是我想这样做而不用制作临时文件,例如如何将命令的输出设置为批处理文件中的变量

set HNAME =`hostname` 

这是我目前的,但我正在使用的脚本正在同一台计算机上运行,​​我相信我创建的临时文件导致与.txt文件的名称问题。

hostname >> hostname.txt 


    set /p HNAME=<hostname.txt 

    pause 

    echo hello > %HNAME%.txt 
    pause 
+0

可能重复的[Windows批处理文件:如何设置一个变量与命令的结果?](http://stackoverflow.com/questions/889518/windows-batch-files-how-to-set-a - 变量与命令的结果) – npocmaka

+0

和[Windows批处理帮助从命令输出设置变量](http://stackoverflow.com/q/1746475)和[批处理文件 - 设置命令输出作为变量](http://stackoverflow.com/q/23028318) –

+0

批量字符串分配时要非常小心。 'set'和'set/p'对''='**'两边的空格敏感。您设置的HNAME = ...会设置一个名为“HNAME space”的变量,并且在分配的值中还包括行中的任何尾随空格,这些空格可能很难找到。 'set“HNAME = value”'安全地忽略尾随空格。还要注意,除了'set“HNAME = value”'中的封闭兔耳之外,任何“quotish”字符都被包含在分配的值中。 – Magoo

回答

1

你必须使用的指挥,这样的事情:

for /f "usebackq" %i in (`somecommand`) do set envar=%i 

这是非常痛苦的。为/?在命令行获取更多信息。

+0

用于在批处理文件中写入'%% i'而不是'%i'(这两个事件)。 – Stephan

+0

'usebackq'在这种情况下会将''somecommand''变成字符串,但不会处理命令.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''只会分配给'envar'结果的第一个字 – npocmaka

+0

感谢捕捉。我以为我原本使用过...... –

相关问题