gpt4 book ai didi

batch-file - 命令行 FOR/F 失败

转载 作者:行者123 更新时间:2023-12-04 05:54:34 25 4
gpt4 key购买 nike

我有一个 DOS 构建脚本,它可以在一个 Windows Server 2008 R2 上运行,但不能在另一个上运行。要查看损坏机器上的症状,请在命令行输入以下任一命令:

for /f %X in ('dir /b *.txt') do @echo %X
for /f "usebackq" %X in (`dir /b *.txt`) do @echo %X

给出:“'dir/b *.txt' 不被识别为内部或外部命令。”而例如
for %X in (*.txt) do @echo %X

工作正常,所以/f 没有被正确遵守。我不相信这是命令扩展本身(启动 cmd/x 显示相同的行为;在问题服务器上的 cmd/y 内运行它们会给出正常的“此时/f 是意外的”)。我还检查了命令扩展注册表项,并在批处理文件中尝试了“setlocal enableextensions”。

我认为这无关紧要,但服务器之间的差异在于失败的服务器是物理的;它的 CPU 没有 VT 扩展;确实安装了迈克菲。据我所知,它们在不同的时间以相同的方式安装。

有没有人有什么建议?我被卡住了!

最佳答案

检查 COMSPEC环境变量在它不起作用的机器上,即做 echo %COMSPEC%并查看它包含的内容(它应该是 %windir%\system32\cmd.exe 或类似的)。

长篇故事:

你的详细问题排除了所有其他潜在的可能性(比如需要在批处理文件中使用 %%X 而不是 %X,与命令行相比),比如摆弄 setlocal enableextensions (或类似的开关、注册表项等)。顺便说一句,错误消息不适合。

如果您收到错误消息“...未被识别为内部或外部命令”,则表示 CMD.EXE 找不到您尝试执行的命令。当然,由于“dir”是一个内部命令,“这不应该发生”。

我能够通过以下操作重现您的错误:

  • 开始 CMD.EXE
  • 输入以下 SET ComSpec=DoesNotExist
  • 输入以下 CMD.EXE ,即开始另一个嵌套,CMD.EXE session 。这一步是必需的,在运行中 CMD.EXE session ,更改为 ComSpec似乎没有引起注意。
  • 中新CMD.EXE session 输入您的命令(例如 for /F %x in ('dir /b') do @echo%x ),您应该会看到您看到的错误。请注意,如果您只输入 dir它仍然可以工作,因此您必须通过例如 for 进行“间接”执行环形。有趣的。

  • 请注意,这一切都是为了重现您所看到的内容,导致系统出现此行为的确切环境或设置条件的原因可能有所不同,但事实是 ComSpec环境变量指的不是 CMD.EXE应该是一样的。

    关于batch-file - 命令行 FOR/F 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9668011/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com