【问题标题】:Removing double quotes in a batch program in Windows 2003在 Windows 2003 中删除批处理程序中的双引号
【发布时间】:2011-03-16 16:07:06
【问题描述】:

我刚刚通过了一个初级批处理员(可能更像是一个屠夫)并且已经与这个战斗太久了(我找到了一些建议并尝试了它们,但似乎无法让它们中的任何一个起作用 - 可能UE)。我在 Windows 2003 机器上创建了一个文件,其中包含一个批处理文件 (dir_list.txt),如下所示:

"t001wp" 
"w003th" 
"b005ku" 
"k009dp" 
.
.
.
.

我想去掉双引号。提前感谢您的帮助。

【问题讨论】:

    标签: windows batch-file windows-server-2003 dos


    【解决方案1】:

    搜索“for”命令的帮助,答案在帮助的底部附近。 %%~i 会自动去掉引号。如果引用的文本中有空格,则需要使用“tokens=*”来捕获引号中的整个字符串。希望这会有所帮助。

    @echo off
    
    for /f "tokens=*" %%i in (x) do echo %%~i
    

    【讨论】:

      【解决方案2】:
      @echo off
      
      for /F "usebackq delims= " %%j in (dir_list.txt) do (
          echo %%~j>> new_dir_list.txt
      )
      

      更新:根据 bobbogo 的建议进行了编辑。

      更新 2: 已编辑以考虑尾随空格。

      【讨论】:

      • 令人讨厌的是,>> 之前的空格会变成new_dir_list.txt。你需要echo %%~j>>new_dir_list.txt。叹息。
      • 这似乎很好地删除了前导 " 但不是最后一个?我认为可能有尾随空格。很抱歉漏掉了。
      • 我认为它在做同样的事情?我没有看到变化(除了 j>> 之间删除的空格)?
      • @adarshr:但使用 delims= 它也会用空格分割字符串,因此对于字符串 " one two",您只会得到 one。您需要添加 tokens=* 以仅删除前导空格
      • @jim 现在是delims= ",之前是delims="。 @jeb 是的,你可以这样做,但我认为吉姆没有这个要求。
      【解决方案3】:

      也许:

      type nul>output.txt
      setlocal enabledelayedexpansion
      for /f %%X in (my_file.txt) DO (
          set line=%%X
          set line=!line:"=!
          echo.!line!>>output.txt
      )
      

      【讨论】:

        猜你喜欢
        • 2011-04-20
        • 2010-10-06
        • 2022-07-21
        • 1970-01-01
        • 2018-04-23
        • 1970-01-01
        • 2014-03-13
        • 1970-01-01
        相关资源
        最近更新 更多