批处理中去除变量中的空格

18

我正在编写一个脚本,以去除文件名中的空格并将结果输出到一个.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? - foxidrive
5个回答

79

不仅仅是去除开头和结尾的空格,还可以使用以下代码一行实现去除所有空格而无需使用 setlocal enabledelayedexpansion:

```batch set "string=%string: =%" ```
set var=%var: =%

将该字符串中的所有空格替换为空字符串。

来源:DOS - 字符串操作


在我想要移除字母与变量之间的空格时(例如,“_p 011820181033”需要变成“_p011820181033”),这段代码完美地运行了。谢谢! - midoriha_senpai
1
这个技巧同样适用于替换其他字符:只需将要删除的字符替换为空格即可。例如,set var=%var:.=% 将会删除变量中的所有点号,如果你有一个包含点号版本号的变量,并且你只需要数字,那么这个技巧可能会很有用。 - Wayfarer

13
你收到“ECHO is on.”的提示是因为没有启用延迟环境变量扩展,导致在运行for命令之前就插入了%var%%MyVar%的值,由于它们在一开始未被定义,因此插入的是空变量。 当运行echo %MyVar%>>text.txt时,它会被解释为echo >>text.txt。当echo没有任何参数运行时,它会输出echo是否打开或关闭,这就是你在text.txt中看到的内容。
要解决这个问题,你需要做两件事:
首先,你的第二行有些问题。setlocallocal之间没有空格。第二行应该是SETLOCAL EnableDelayedExpansion
其次,要使用延迟环境变量扩展,你必须将每个变量中所有的%替换为!,如!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: =!


2

你做错了一件事情,你启用了变量扩展(写错了),而且你没有使用它。当你使用enabledelayedexpansion时,你需要像这样写变量名:!Variable! 而不是这样:%Variable%。

但是在这段代码中,你不需要使用它:

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

1
@foxidrive,它有效,抱歉但是...你在评论之前测试过它吗? - ElektroStudios

0

set var=%var: =% 对我不起作用。 因此,我尝试了以下代码,成功地将数字减一再加一:set /a var-=1 & set /a var+=1


肯定不能用于字母数字字符串(通常是文件名)。要从所谓的数字中删除(前导和/或尾随)空格,只需使用set /a var=var即可。 - Stephan

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"
    )

你只需要在文本中添加打印功能即可。

2
刚刚移除了所有文件名并保留了扩展名。 - user2313522

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接