批处理笔记(4) - 通过文本内容重命名文件

对一个目录下,不能全部规则的命名文件,先按上文介绍的在Excel拖行数据保存在文本,然后用批处理一次性处理各文件,在处理前给一个对应命名的提示,先审检是否达到既定目的。

准备一个文本文件,里面是一行行即将要命名的文件名;准备一个要命名的目录文件;
保存本代码到通过文本内容重命名文件.bat,执行按提示操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
@echo off
@REM @Author: [email protected]
title 通过文本内容重命名文件 by:小可([email protected])
setlocal EnableDelayedExpansion
:GTCONTINUE
cls
echo 通过文本内容重命名文件
echo -----------------------------
set /p importTxt=拖文本文件按Enter键:
set /p filesPath=拖目录路径按Enter键:
set i=0
for /f "usebackq tokens=1 delims==" %%a in (`more /s %importTxt%`) do (
set /a i+=1
set "author[!i!]=%%a"
)
set j=0
for /f "usebackq" %%b in (`dir /b "%filesPath%\*.*"`) do (
set /a j+=1
)
set k=!i!,!j!
set nMax=0
for %%a in (%k%) do (
if %%~a gtr !nMax! set nMax=%%~a
)
rem echo 最大值:!nMax!
set nMin=!nMax!
for %%a in (%k%) do (
if %%~a lss !nMin! set nMin=%%~a
)
rem echo 最小值:!nMin!

set c=0
set FilesExist=0
echo.
echo 文件即将按以下格式重命名:
echo -----------------------------
for /f "usebackq delims==" %%b in (`dir /a-d /b /on /tc "%filesPath%"`) do (
set /a c+=1
cd /d %filesPath%
if !c! leq !nMin! (
for %%a in (!c!) do (
if not exist !author[%%a]!%%~xb (
echo "%%b" "!author[%%a]!%%~xb"
) else (
set /a FilesExist+=1
echo 已有文件 "!author[%%a]!%%~xb"
)
)
)
)
echo -----------------------------
if !FilesExist! gtr 0 (
echo.
echo 当前目录有 !FilesExist! 个相同命名的文件,
echo 可能会引起文本内容行和对应文件的错位!
echo.
)
echo 按Enter键确认操作
pause >nul
set d=0
for /f "usebackq delims==" %%b in (`dir /a-d /b /on /tc "%filesPath%"`) do (
set /a d+=1
cd /d %filesPath%
if !d! leq !nMin! (
for %%a in (!d!) do ( if not exist "!author[%%a]!%%~xb" ( ren "%%b" "!author[%%a]!%%~xb" ) )
)
)
echo 搞定
pause >nul
goto GTCONTINUE
exit

(本篇结束)

许可协议:自由转载-保持署名-非商业性使用-禁止演绎 (CC BY-NC-ND 4.0)

By 小可 from https://xinlu.ink/tech/batch-in-action-4-rename-files-from-text.html