有一天我用批处理脚本示例写了一个答案,有人指出,当您将输出重定向到文件时,如果您先重定向到文件,然后将您的命令、文本等(以下示例[1])。
该建议并未提及您不想这样做的任何原因,因此我开始进行一些调查,因为我一直在寻找本机方法以使事情看起来更干净一些。
常见方式示例
Run Code Online (Sandbox Code Playgroud)IF EXIST "%tmpfile%" DEL /Q /F "%tmpfile%" ECHO Some Text Here>>"%tmpfile%" ECHO A little more text here>>"%tmpfile%" ECHO Some other text over here man>>"%tmpfile%" ECHO Can Scooby please have a Scooby snack>>"%tmpfile%"
示例更容易阅读方式
Run Code Online (Sandbox Code Playgroud)IF EXIST "%tmpfile%" DEL /Q /F "%tmpfile%" ECHO>>"%tmpfile%" Some Text Here ECHO>>"%tmpfile%" A little more text here ECHO>>"%tmpfile%" Some other text over here man ECHO>>"%tmpfile%" Can Scooby please have a Scooby snack
显然,使用这种格式的命令从批处理脚本中读取逻辑要容易得多,ECHO
但是如果在批处理脚本中使用这种方法作为标准存在任何问题,就会引起关注。
我在互联网上环顾四周,我能找到的最多的是下面引用的一个来源,声明不要在还包含其他重定向的命令行中使用此技术[2]。
我将以下 PowerShell 脚本保存为 test.ps1:
# test script
Write-Output "z" >> C:\path\to\log.txt
Run Code Online (Sandbox Code Playgroud)
在任务计划中,我将其设置为“无论用户是否登录都运行”。
触发器是“一次”,但我选中了“重复任务间隔: ”并设置为“ 5 分钟”。
在“操作”选项卡中,我有一个操作 - “启动程序”设置为“ powershell.exe ”,“添加参数(可选) ”设置为“ -file c:\path\to\test.ps1 ”和“启动于” (可选) “设置为” c:\path\to ”。
在“历史记录”选项卡中我看到:
任务计划程序在任务“\test”的实例“{a1485114-69fe-4aa8-95ee-27d8f260591a}”中启动了操作“powershell.exe”。
所以看起来它对我有用,但 log.txt 既没有被创建也没有添加到。
有任何想法吗?
powershell scheduled-tasks windows-task-scheduler windows-10