【问题标题】:Ampersand as a delim in a FOR /F statement与号在 FOR /F 语句中作为分隔符
【发布时间】:2013-06-28 08:19:38
【问题描述】:

我试图在 windows 命令行脚本的 FOR /F 语句中转义 & 符号,如下所示:

FOR /F "tokens=1,2 delims=^&" %%A IN ("%Var%") DO (...

运行脚本的结果还是:

 & was unexpected at this time

使用 & 作为分隔符的正确方法是什么?还是应该将它替换为要解析的字符串中的其他内容?

【问题讨论】:

  • 错误不是由您显示的代码产生的。该测试有效FOR /F "tokens=1,2 delims=^&" %%A IN ("123&456") Do echo %%A,%%B。但是^& 将 & 和插入符号定义为分隔符
  • @jeb - 它很可能在显示的代码中,具体取决于%Var% 的值。
  • 您应该接受解决您问题的答案。

标签: windows for-loop batch-file cmd windows-scripting


【解决方案1】:

& 符号已经被双引号转义了。所以更多的转义是没有必要和成功的:

@echo OFF &SETLOCAL
for /f "delims=&" %%i in (file) do echo %%i

【讨论】:

    【解决方案2】:

    正如 Endoro 已经说过的,您不需要在 delims 规范中转义 &

    您的错误可能与"%Var%" 的扩展有关。如果您的值同时包含引号和&,而& 在展开后没有被引用,那么这正是您将得到的错误。请记住,语句中的引号可以被值中的引号取消。

    你可以使用延迟扩展来解决问题

    setlocal enableDelayedExpansion
    FOR /F "tokens=1,2 delims=&" %%A IN ("!Var!") DO (...
    

    但是如果你的值也包含!,那么你需要在你扩展你的FOR变量之前禁用延迟扩展,否则扩展的值会被破坏。

    setlocal enableDelayedExpansion
    FOR /F "tokens=1,2 delims=&" %%A IN ("!Var!") DO (
      endlocal
      ...
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多