有一天我用批处理脚本示例写了一个答案,有人指出,当您将输出重定向到文件时,如果您先重定向到文件,然后将您的命令、文本等(以下示例[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]。
我正在编写一个批处理脚本,它通过回显每一行并将输出定向到创建的文件来创建 VB 脚本。除了获取命令行变量并将其用作 VBS 变量的两行之外,它在大多数情况下都有效。这是代码:
ECHO:strHomeFolder = oShell.ExpandEnvironmentStrings^(^"^%USERPROFILE^%^"^) >> uninstallBeta.vbs
ECHO:strProgramData = oShell.ExpandEnvironmentStrings^(^"^%ProgramData^%^"^) >> uninstallBeta.vbs
Run Code Online (Sandbox Code Playgroud)
它在 VB 脚本中应该是这样的:
strHomeFolder = oShell.ExpandEnvironmentStrings("%USERPROFILE%")
strProgramData = oShell.ExpandEnvironmentStrings("%ProgramData%")
Run Code Online (Sandbox Code Playgroud)
但会发生什么是批处理脚本,它只是回应整行,包括>> uninstallBeta.vbs. 知道为什么会这样吗?我有类似的行来创建其他 VBS 和批处理脚本,我认为这样做很好。我检查了拼写错误,没有发现。它在命令提示符中运行良好,但在批处理脚本中不起作用。
在 Windows 控制台中
where命令,我将在以下位置找到一个文件%PATHwhere cmd->C:\Windows\System32\cmd.exe我试过...
cd %(... where <F> | cd 我认为...
where命令返回目录和文件名 cd命令