我想重命名2个文件" 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"
答案 0 :(得分:1)
当然:
重命名“%% I”“%%〜n
我!Log.rtf”
但是它给出了输出data1
log.rtf和data2
log.rtf
顺便说一句。您尝试使用setlocal delayedexpansion
和单!
来实现什么?
编辑:如果您坚持使用for
(因为您可能需要重命名许多文件):
@echo off
setlocal enabledelayedexpansion
for %%i in (*.txt) do (
set file=%%i
set file=!file:Data=Log!
set file=!file:.txt=.rtf!
echo ren %%i !file!
)
第一个set
将变量file
设置为文件名
第二个用Data
Log
第三个用.txt
.rtf
然后将原始文件名(%%i
)重命名为更改的文件名(!file!
)
(echo
只是在屏幕上显示命令而不是真正重命名文件。很适合测试。如果你确定代码有,你想要什么,只需删除{{1} })
需要echo
来使用变量,该变量在同一个块内的块(在setlocal enabledelayedexpansion
和(
之间)内更改。因此,您必须将变量用作)
而不是!var!
注意:当然这段代码可以改进,但作为初学者:尽可能保持简单(和可读)。例如,此代码将替换%var%
,但不会替换Data
或data
,它不会处理文件名中的空格,...
答案 1 :(得分:0)
如果您使用单独的代码重命名每个文件,或者这会破坏对象,它可能会更好吗? 该网站显示了如何使用命令行重命名文件: http://www.sevenforums.com/tutorials/56013-file-folder-rename-command-prompt.html
答案 2 :(得分:0)
for %%a in ("%~dp0data*.txt"
) do for /f "delims=DdAaTt" %%b in ("%%~na"
) do echo ren "%%~fa" "log%%b.rtf"
它只是迭代指定的文件列表,对于每个文件名,使用不必要的字符作为aditional for循环的分隔符。这样只剩下数字并用于重命名文件。
要重命名的命令将回显到控制台。如果输出正确,请删除echo
命令以重命名文件。
答案 3 :(得分:0)
mv
命令来重命名Windows中的文件(使用CLI)如以上答案中所述,mv
命令也可以在Windows中使用,以重命名文件名。我尝试了建议的rename
和ren
命令,但出现错误:bash: ren: command not found.
在下面使用更改文件名:
mv filename new_filename