Command line 如何使用命令行重命名文件

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”如果使用单独的代码重命名

我想将两个文件“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”

如果使用单独的代码重命名每个文件,可能会更好,或者这会破坏对象吗? 本网站介绍如何使用命令行重命名文件: 当然可以:

重命名“%%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
命令以重命名文件。

User
mv
命令以重命名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"