我正在编写一个脚本来根据日期重命名文件。
服务器每天都会生成文件并输出如下内容:
fil150807102600000001.txt
fil150807102600000002.txt
fil150807102600000003.txt
我的脚本的目标是自动将它们重命名为:
FILE-SRV1.DAAMMJJ_00000001
FILE-SRV1.DAAMMJJ_00000002
FILE-SRV1.DAAMMJJ_00000003
我为实现这一目标所采取的手动步骤是:
1- format date to AAMMJJ (i am on a french computer, windows 7)
set date=%date:~8,2%%date:~3,2%%date:~0,2%
echo %date%
150807
2- Now rename my file as expected
set fname=fil150807102600000001.txt
ren "%fname%" "FILE-SRV1.D%date%_%fname:~13,8%" [strip off the first
13 char and leave the 8 last]
我的文件已正确重命名。
现在我想编写以下脚本:
loop into the directory,
find all file names starting by fil*
and rename them as needed
这是我的脚本,假设该脚本从我的原始文件所在的文件夹运行:
set date=%date:~8,2%%date:~3,2%%date:~0,2%
for /f %%f in ('dir fil* /b') do ren %%f "FILE-SRV1.D%%date%%_%%f:~13,8%"
结果是:
测试文件存在
C:\test\bat>dir fil* /b
fil150807102600000001.txt
fil150807102600000002.txt
fil150807102600000003.txt
运行脚本
C:\test\bat>script2.bat
C:\test\bat>set date=150807
C:\test\bat>for /F %f in ('dir fil* /b') do ren %f "FILE-SRV1.D%date%_%f:~13,8"
C:\test\bat>ren fil150807102600000001.txt "FILE-RV1.D%date%_fil150807102600000001.txt:~13,8"
Le nom de fichier existe déjà, ou le fichier est introuvable.
C:\test\bat>ren fil150807102600000002.txt "FILE- SRV1.D%date%_fil150807102600000002.txt:~13,8"
Le nom de fichier existe déjà, ou le fichier
est introuvable.
C:\test\bat>ren fil150807102600000003.txt "FILE-SRV1.D%date%_fil150807102600000003.txt:~13,8"
Le nom de fichier existe déjà, ou le fichier
est introuvable.
非常感谢您的帮助
答案1
您使用的符号太多%
,分配给变量不是一个好主意DATE
,并且您不能FOR
直接对变量执行字符串操作(它们就像并且您需要在末尾%%f
带有 a 的东西):%
setlocal enabledelayedexpansion
set dat=%date:~8,2%%date:~3,2%%date:~0,2%
for %%f in (fil*) do (
SET "FILE=%%f"
ren "%%f" "FILE-SRV1.D%dat%_!FILE:~13,8!"
)
(setlocal enabledelayedexpansion
需要使用符号!
,以便FILE
变量在每次循环迭代中得到更新。)