Command line 如何使用命令行重命名文件
我想将两个文件“Data1.txt”重命名为“Log1.rtf”,将“Data2.txt”重命名为“Log2.rtf” 我目前正在使用此代码Command line 如何使用命令行重命名文件,command-line,cmd,Command Line,Cmd,我想将两个文件“Data1.txt”重命名为“Log1.rtf”,将“Data2.txt”重命名为“Log2.rtf” 我目前正在使用此代码 @ECHO OFF FOR %%I IN ("%~dp0*.txt") DO ( SET "ext=%%~xI" SETLOCAL EnableDelayedExpansion RENAME "%%I" "%%~nI!Log.rtf" ENDLOCAL ) 但是它会给出输出“data1log.rtf”和“data2log.rtf”如果使用单独的代码重命名
@ECHO OFF
FOR %%I IN ("%~dp0*.txt") DO (
SET "ext=%%~xI"
SETLOCAL EnableDelayedExpansion
RENAME "%%I" "%%~nI!Log.rtf"
ENDLOCAL
)
但是它会给出输出“data1log.rtf”和“data2log.rtf”如果使用单独的代码重命名每个文件,可能会更好,或者这会破坏对象吗? 本网站介绍如何使用命令行重命名文件: 当然可以: 重命名“%%I”“%%~
n
I!Log.rtf”
但是它给出了输出data1
log.rtf和data2
log.rtf
顺便问一下,你想用setlocaldelayedexpansion
和那一个实现什么代码>
编辑:如果您坚持使用
编辑(因为您可能有许多文件需要重命名):
第一个set
将变量file
设置为文件名
第二个将数据
替换为日志
第三个将.txt
替换为.rtf
然后将原始文件名(%%i
)重命名为更改后的文件名(!file!
)
(那里的echo
只是在屏幕上显示命令,而不是真正重命名文件。这对测试很有好处。如果您确定代码符合您的要求,只需删除echo
)
使用变量时需要使用setlocal enabledelayedexpansion
,该变量在同一块内的块内(在(
和)
之间)更改。因此,必须将变量用作!瓦尔代码>而不是%var%
注意:这段代码当然可以改进,但对于初学者来说:尽可能保持它的简单性(可读性)。例如,此代码将替换数据
,但不是数据
或数据
,它不会处理文件名中的空格
for %%a in ("%~dp0data*.txt"
) do for /f "delims=DdAaTt" %%b in ("%%~na"
) do echo ren "%%~fa" "log%%b.rtf"
它只是在指定的文件列表上迭代,对于每个文件名,使用不必要的字符作为传统for循环的分隔符。这样,只剩下数字,用于重命名文件
要重命名的命令将回显到控制台。如果输出正确,请删除echo
命令以重命名文件。Usermv
命令以重命名windows中的文件(使用CLI)
如上面的回答所述,mv
命令也可以在windows中用于重命名文件名。我尝试了rename
和ren
命令,但出现了错误:bash:ren:command未找到。
使用以下命令更改文件名:
mv filename new\u filename
事实上,我不知道这段代码的工作原理:p我只是从其他地方复制这段代码,好吧,只需两个文件,就不需要为
乱翻,特别是如果你对它了解不多的话。只需ren data1.txt log1.rtf
ren data2.txt log2.rtf
。如果有更多的文件要处理,那么为
构造一个就有意义了。谢谢它的工作,所以我不需要“for”。如果我在你的代码中使用两次“for”会不会降低性能?嗯,理论上是的。事实上,就这两个文件而言,大约需要几毫秒——您不会注意到任何差异。批处理与性能无关。尽量保持简单。如果您确切地知道源文件和目标文件的名称,就没有必要使其复杂化。现在我使用了两次相同的代码(“%~dp0*.txt”)中的%%I使用@ECHO OFF(“%~dp0*.txt”)DO(“ext=%%~xI”EnableDelayedExpansion RENAME“%%I”“Log1.rtf”ENDLOCAL)@ECHO OFF FOR%%IN(“%~dp0*.txt”)DO(设置“ext=%%~xI”SETLOCAL EnableDelayedExpansion重命名“%%I”“Log2.rtf”ENDLOCAL)
将data1.txt重命名为Logdata1.rtf我希望Log1.rtf与data2.txt重命名为Logdata2.rtf的情况相同。rtf@UzairAli,我运行它时看到的是ren“D:\test\data1.txt”“log1.rtf”
for/f
的delims不应让任何dta
字符通过。
for %%a in ("%~dp0data*.txt"
) do for /f "delims=DdAaTt" %%b in ("%%~na"
) do echo ren "%%~fa" "log%%b.rtf"