声明一个变量,并使用它在一行中重定向输出

时间:2019-09-24 20:35:55

标签: windows cmd

我想设置一个变量并将其用作文件名以重定向输出,所有这些操作都在命令行和一行中完成。

我设法用 set foo=bar && call echo %foo%打印bar

现在,我想像这样将bar写入名为baz的文件中 set foo=bar && call echo baz > %foo%(此操作无效,它写入名为%foo%的文件中

4 个答案:

答案 0 :(得分:0)

您可以通过文件内部的变量扩展来做到这一点:

setlocal EnableDelayedExpansion
set foo=bar && @echo baz > !foo!
endlocal

答案 1 :(得分:0)

这应该有效

@echo off set /p "file=PathToFile" set /p "Write=text" echo %Write%>> %file%

写入是您写入文件的内容 set / p只是将变量设置为用户输入。

答案 2 :(得分:0)

这应该有效

set "foo=bar.txt" & cmd /c echo baz^>"%foo%"

提供了foo之前未定义的内容。
如果有可能定义foo,或者如果您多次使用foo的不同定义行而导致foo在以后的使用中被定义,那么您可以使用延迟在第二个cmd实例中扩展:

set "foo=bar.txt" & cmd /v /c echo baz^>"!foo!"

如果您当前的cmd会话已经开始延迟cmd /v进行扩展,那么您将不需要使用额外的cmd层:

set "foo=bar.txt" & echo baz>"!foo!"

答案 3 :(得分:0)

请问您为什么要这样做?

可以创建一个变量并在一行中使用它,但是它需要通过实例化第二个命令会话来“诱使” cmd扩展变量。

SET "foo=bar.txt"&cmd /c "ECHO.baz>%foo%"

多数情况下,这并不是最有用的方法,但它确实满足您的要求。

结果:

C:\Admin>SET "foo=bar.txt"&cmd /c "ECHO.%~A>%foo%"

C:\Admin>dir *bar*
 Volume in drive C has no label.
 Volume Serial Number is D4CD-98ED

 Directory of C:\Admin

09/25/2019  09:26 AM                 5 bar.txt
               1 File(s)              5 bytes
               0 Dir(s)   4,869,840,896 bytes free

编辑从昨天开始一直显示此屏幕,并且不得不在此AM重新加载chrome,但确实有点麻烦;更新页面,以至于我没有意识到其他人已经回答了该问题,因此在发布后会进行更新。

我的答案本质上是公认答案的另一种语法,因为cmd / c中的引号是可选的