【问题标题】:For statement - really odd output (Batch Files)For 语句 - 非常奇怪的输出(批处理文件)
【发布时间】:2011-06-03 14:47:20
【问题描述】:

我有以下批处理语句:

for /f "delims=" %%x in (file.lst) do set "offendingfile=%%x"

虽然出于一些非常奇怪的原因,当它被调用时,它会输出:

"C:\Windows\calc.exe "

而不是

"C:\Windows\calc.exe"

由于有一个尾随空格,我无法在批处理文件中的任何其他语句中正确使用它,有谁知道它为什么这样做以及如何解决这个问题,因为它让我发疯了!

【问题讨论】:

标签: windows batch-file


【解决方案1】:

您的file.lst 文件的文件名后面是否有空格?

我检查了 file.lst 有:c:\windows\calc.exe 并且输出是正确的,但是如果 file.lst 文件包含 c:\windows\calc.exe<SPACE>,则输出与您得到的相同(并且也是预期的输出) )。

【讨论】:

    【解决方案2】:

    我相信for 语句的delims= 部分正在删除使用空格作为分隔符的默认行为。如果您删除该部分,那么它应该删除尾随空白:

    for /f %%x in (file.lst) do set "offendingfile=%%x"
    

    【讨论】:

    • 这确实解决了尾随空格的问题,并引入了另一个不完整的路径/名称,例如Program Files
    • @Andriy:是的,你是对的。对于这样的任务,通常更容易求助于 Ruby、Python、Perl 等。如果 OP 使用像 Take Command 这样的东西,那么像 @trim 这样的函数是可用的。否则它可能需要类似suggested here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多