【问题标题】:"for /f" doesn't set variable using cmd.exe batch file“for /f”不使用 cmd.exe 批处理文件设置变量
【发布时间】:2011-12-09 06:28:55
【问题描述】:
rmtshare \\server\sharename$ | for /f "tokens=3,4,5 delims=\" %%A in ('find "Path"') DO 
SET path1=%%A\%%B\%%C
echo %path1%

它会在设定的区域内完成所有工作。我想取出共享的物理路径,把它变成一个变量,以备后用。我的方法不起作用,我不知道我错过了什么。

【问题讨论】:

  • 怎么不工作了?有什么错误或结果?
  • 当我执行 echo %path1% 时,什么都没有。它通过第一部分然后它将显示设置 path1=path.first.last 然后我回显并没有显示任何内容

标签: windows-xp cmd


【解决方案1】:

确保您要在 FOR 循环中运行的命令位于同一行(例如 for /f ... do set path1=%%A\%%B\%%C,或者,如果您有多个命令,则将它们分组在括号中,如下所示:

for /f ... do (
  echo "Setting path1"
  set path1=%%A\%%B\%%C
)
...

(另外,您是否设置了SETLOCAL EnableDelayedExpansion?如果有,您可能需要使用!path1! 而不是%path1%。)

【讨论】:

  • 它们都在同一行减去最后一个回显,看看它是否有效。我没有使用 setlocal
  • for /f "tokens=3,4,5 delims=\" %%G in ('rmtshare \\server\sharename$') DO set op=%%G\%%H\ %%I echo %op% 我赢了!
【解决方案2】:

我相信 SET 不是持久的,您应该使用 SETX 在命令提示符中设置一个变量,并让它留在该 CMD 会话之外, afaik,SETX 在 Windows 7 上是原生的,但在旧 Windows 版本的资源工具包中可用。

【讨论】:

    【解决方案3】:

    您需要在您的选项中包含 usebackq,如下所示:

    for /f "usebackq tokens=3,4,5 delims=\" %%A in ...
    

    【讨论】:

      猜你喜欢
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多