我正在编写一个文件来从文件夹中的文件名中删除空格,然后将结果放在.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
)
有人能告诉我什么错了吗?
答案 0 :(得分:33)
删除所有空格(不仅仅是前导和尾随)可以在不使用setlocal enabledelayedexpansion
的情况下完成以下行:
set var=%var: =%
这可以通过用空字符串替换字符串中的所有空格来实现。
答案 1 :(得分:8)
您获得ECHO is on.
的原因是因为未使用延迟扩展,导致在%var%
命令之前插入%MyVar%
和for
的值运行,因为它们没有在开始时定义,所以插入了空变量。当echo %MyVar%>>text.txt
运行时,它被解释为echo >>text.txt
。当没有任何参数运行echo时,它会输出echo是打开还是关闭,这是你在text.txt
中得到的。
要解决问题,您必须做两件事:
首先,你的第二行有问题。 setlocal
中的集合和本地之间没有空格。第二行应为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 :(得分:1)
错误的是你已经启用了变量扩展(你把它弄糟了......)并且你没有使用它,当你使用enabledelayedexpansion时你需要写变量名称:!变量!而不是其他:%变量%
但您不需要将此代码用于此代码:
@echo ON
For %%# in (*) do (
SET "var=%%~n#"
Call Set "MyVar=%%var: =%%"
Call echo %%MyVar%%>>text.txt
)
答案 3 :(得分: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