【问题标题】:Removing spaces from a variable in batch批量删除变量中的空格
【发布时间】:2013-04-22 23:35:21
【问题描述】:

我正在编写一个文件以从文件夹中的文件名中删除空格,然后将结果放入.txt 文件中。我只是得到“Echo is on”的结果。一遍又一遍。

这是我目前所拥有的:

@echo ON
SET LOCAL EnableDelayedExpansion
For %%# in (*.*) do (
    SET var=%%~n#
    Set MyVar=%var%
    set MyVar=%MyVar: =%
    echo %MyVar%>>text.txt
)

谁能告诉我怎么了?

【问题讨论】:

  • 你调用批处理文件 echo.bat/cmd 了吗?

标签: variables batch-file spaces


【解决方案1】:

可以在不使用setlocal enabledelayedexpansion的情况下删除所有空格(不仅仅是前导和尾随):

set var=%var: =%

这是通过用空字符串替换字符串中的所有空格来实现的。

来源:DOS - String Manipulation

【讨论】:

  • 当我想删除字母和变量之间的空格时效果很好(例如,“_p 011820181033”需要是“_p011820181033”)。谢谢!
  • 这个技巧也适用于替换其他字符:只需将所需字符而不是空格删除即可。例如,set var=%var:.=% 将删除变量中的所有点,如果您的变量包含带点的版本号并且您只需要数字,这可能会很有用。
【解决方案2】:

你得到ECHO is on.的原因是因为没有使用延迟扩展,导致%var%%MyVar%的值在for命令运行之前被插入,因为它们没有被定义一开始,插入了空变量。当echo %MyVar%>>text.txt运行时,它被解释为echo >>text.txt。当 echo 在没有任何参数的情况下运行时,它会输出 echo 是打开还是关闭,这就是您在 text.txt 中得到的。

要解决这个问题,你必须做两件事:

首先,您的第二行有问题。 setlocal 中的 set 和 local 之间没有空格。第二行应该是SETLOCAL EnableDelayedExpansion

其次,要使用延迟扩展,您必须将每个变量中的所有%s 替换为!,例如!var! 而不是%var%

最终结果:

@echo ON
SETLOCAL EnableDelayedExpansion
For %%# in (*.*) do (
    SET var=%%~n#
    Set MyVar=!var!
    set MyVar=!MyVar: =!
    echo !MyVar!>>text.txt
)

在这种情况下,您实际上不需要使用临时变量,您只需执行SET MyVar=%%~n# 并跳至set MyVar=!MyVar: =!

【讨论】:

    【解决方案3】:

    错误的是你启用了变量扩展(你写得不好......)并且你没有使用它,当你使用 enabledelayedexpansion 时,你需要将变量名写成这样:!Variable!而不是这个 else:%Variable%

    但您不需要将其与此代码一起使用:

    @echo ON
    For %%# in (*) do (
        SET "var=%%~n#"
        Call Set "MyVar=%%var: =%%"
        Call echo %%MyVar%%>>text.txt
    )
    

    【讨论】:

    • @foxidrive,它有效,对不起,但是......你在评论之前测试过它吗?。
    【解决方案4】:

    在包含要重命名的文件的文件夹中运行以下批处理

        @echo off
        setlocal enabledelayedexpansion
        for %%j in (*.*) do (
        set filename=%%~nj
        set filename=!filename=.=_!
        set filename=!filename= =_!
        if not "!filename!"=="%%~nj" ren "%%j" "!filename!%%~xj"
        )
    

    你只需要将打印添加到txt

    【讨论】:

    • 刚刚删除了所有文件名并留下了扩展名
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    相关资源
    最近更新 更多