【问题标题】:Windows batch For loop not working on one server, working on otherWindows批处理For循环在一台服务器上不起作用,在另一台服务器上工作
【发布时间】:2013-10-27 18:30:22
【问题描述】:

我有一个 Windows 2008 Server(非 R2);我试图根据应用程序池列表修改属性 (/AppPool/maxProcesses)。 所以我这样做了:

set appcmd=c:\Windows\system32\inetsrv\appcmd.exe
for /f %p in (c:\apppools.txt) do @%appcmd% set apppool %p /processmodel.maxProcesses:2

没有输出。此外,这都是交互式的,而不是批处理文件。 通常,它应该显示 AppPools,以及它正在设置属性的事实,或者错误,以防拼写错误。

然后我继续验证为什么它不输出

for /f %p in (c:\apppools.txt) do @echo %p

什么都没有。 我转到另一个 Windows 2008(它们实际上是经过系统准备的,因此被认为是相同的。两个命令都有效!

有没有人见过这样的东西,或者至少是类似的? 我在想这台服务器可能需要休眠(重启),但这可能只在周末才有可能,因为它是一台服务器。

感谢您的任何建议,

【问题讨论】:

  • 你确定 C:\apppools.txt 不是机器上不工作的 0 字节文件吗?听起来好像是空的。如果不是,内容是什么?
  • 没有,恐怕不是空的。
  • 抱歉,我不知道在移动设备上发送帖子而不是换行符。不,恐怕它不是空的。我还在记事本中打开了文件,复制了它,关闭了记事本,删除了文件,然后重新创建了它以确保它不包含任何奇怪的字符。它包含该服务器上 appcmd list apppools 的输出。在另一台(不同的服务器)上,我创建了相同的文件,相同的输出。老实说,这就像 Windows 在该服务器上已经失败了。在故障服务器上的 Powershell 中尝试了几个批处理循环,效果很好。
  • 在坏的服务器上尝试type c:\apppools.txt,看看输出是否符合您的预期。
  • 也许空间是个问题?试试这个for /f "delims=" %p in (c:\apppools.txt) do @echo %p。看来你可能还是想要那个。

标签: windows loops batch-file for-loop


【解决方案1】:

如果您是从批处理文件中运行它,则需要将 for 循环变量中的 % 转义为另一个 %。

for /f %%p in (c:\apppools.txt) do @echo %%p

编辑 抱歉,我现在才注意到你说它是交互式的,而不是批处理的。

【讨论】:

  • 没问题,感谢您的回复。无论如何,我确实相信这是一个小故障....某种。以前从未在任何 Windows 或其他操作系统上看到过这种情况。
【解决方案2】:

文件可能隐藏在一个系统上而不是另一个系统上,或者如果它在两个系统上都隐藏,则隐藏文件在两个系统上的处理方式不同。

尝试使用已提供的 cmets 的组合。

for /f "delims=" %p in ('type c:\apppools.txt') do @echo %p

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多