【问题标题】:For /f delims: ignore second occurance of delim-character in a line对于 /f delims:忽略一行中第二次出现的 delim-character
【发布时间】:2016-09-21 11:09:02
【问题描述】:

我正在使用 for /f 从 txt 文件中设置批处理文件中的变量:

for /f "tokens=1,2 delims==" %%V IN (conf.txt) DO set %%V=%%W

不幸的是,分隔符之后的字符串可能再次包含分隔符字符的一倍或多次。例如。文本文件的内容可能如下所示:

_uploadfile=/file=upload.zip 
_password=/passphrase=ab1=cd2:def

现在第二次出现分隔符后的所有文本都没有通过。所以运行我的批处理时的变量只包含

_uploadfile=/file
_password=/passphrase

是否有任何选项可以让 for 忽略第二次出现的分隔符?或者有解决方法吗? 选择另一个字符作为 delim 似乎不是一个好主意,因为几乎所有可打印字符都可以而且应该用作密码。

谢谢!

【问题讨论】:

    标签: batch-file for-loop


    【解决方案1】:

    请改用tokens=1,*

    * 在第二个参数中接收该行中所有剩余的字符。
    这在for /? 中有解释

    【讨论】:

      【解决方案2】:

      jebanswer 很好,除非字符串中出现连续的分隔符,因为for /F 将其视为单个分隔符。例如,假设conf.txt 包含以下字符串...:

      str==abc
      

      ...,命令行...:

      for /F "tokens=1,* delims==" %%V IN (conf.txt) do set "%%V=%%W"
      

      ...会返回这个...:

      str=abc
      

      ...,所以第二个= 符号丢失了。

      要修复代码在这种情况下不会失败,只需完全禁用分隔符...:

      for /F "delims=" %%V IN (conf.txt) do set "%%V"
      

      ...,所以输出是...:

      str==abc
      

      ...,这意味着变量str 被设置为值=abc

      要确保只处理至少包含一个 = 符号的行,请使用以下代码:

      for /F "delims=" %%V IN ('find "=" ^< conf.txt') do set "%%V"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        相关资源
        最近更新 更多