14

我正在编写一个文件以从文件夹中的文件名中删除空格,然后将结果放入.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
)

有人可以告诉我有什么问题吗?

4

4 回答 4

69

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

set var=%var: =%

这通过用空字符串替换字符串中的所有空格来工作。

来源:DOS - 字符串操作

于 2015-06-17T16:19:25.763 回答
13

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

要解决此问题,您必须做两件事:

首先,您的第二行有问题。在 set 和 local in 之间没有空格setlocal。第二行应该是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: =!.

于 2013-04-29T10:37:29.153 回答
1

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

但是您不需要将其与以下代码一起使用:

@echo ON
For %%# in (*) do (
    SET "var=%%~n#"
    Call Set "MyVar=%%var: =%%"
    Call echo %%MyVar%%>>text.txt
)
于 2013-04-29T10:38:57.570 回答
0

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

    @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

于 2013-04-29T10:30:43.863 回答