我想设置一个变量并将其用作文件名以重定向输出,所有这些操作都在命令行和一行中完成。
我设法用
set foo=bar && call echo %foo%
打印bar
现在,我想像这样将bar
写入名为baz
的文件中
set foo=bar && call echo baz > %foo%
(此操作无效,它写入名为%foo%
的文件中
答案 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中的引号是可选的