|
本帖最后由 idiocy 于 2023-6-19 08:06 编辑
请教关于bat批处理通过txt文本内容重命名文件的问题 2023-06-16:
高人好,
小弟想请教一下,
关于bat批处理通过txt文本内容重命名文件的问题.
在网上找了好多批处理,
测试运行皆不理想,
找了个写的很长很全的批处理,
结果打开cmd窗口里面的中文不知道为什么显示的是乱码,
编辑时已经选择了“字体”为“脚本(R):中文 GB2312”结果中文还是显示的是乱码.
举例:
Windows10-64位系统路径为
D:\重命名文件夹
里面有很多个图片文件,
后缀名有
.png
.jpg
.bmp
等等等等,
文件夹里面还有个name.txt文本文档,
文本文档里面的内容为:
10 荔枝虾球 - 111210
02 煎羊肚菌 - 111202
08 脆皮猪手 - 111208
12 冰镇凤梨 - 111212
04 蟹黄煲 - 111204
07 金钩百合 - 111207
05 金牌杏仁酥 - 111205
11 砂锅回头鱼 - 111211
13 田园风光好 - 111213
01 铁板牛仔骨 - 111201
06 铁棍山药 - 111206
09 咸蛋黄 - 111209
03 海鲜豆腐 - 111203
小弟想通过.bat批处理文件先找到某路径下面的“name.txt”文本文档,
然后再识别出这个文本文档里面的内容,
来按文本文档里面的顺序重命名某路径下面的“重命名文件夹”文件夹里面的图片文件,
当然是会先准备好有几个文件就对应写几个文件重命名的名称放在“name.txt”文本文档里面.
网上说有种方法是文本文档里面写重命名的格式要是“原文件名称|目标名称”,
小弟不想使用该方法,
因为还要用到Excel表,
先提取出原文件名称,
然后再对应粘贴目标名称,
然后再复制到文本文档里面,
过程有点太繁琐了.
小弟还想再请教一下,
文件夹里面的很多文件名称太长了,
请问可以使用批处理来只保留后缀名前面的6个字符吗?
就是只保留文件名称后面6个字符的批处理应该怎么写呢?
感激不尽啊.
因附件大小上传有限,
有8张图片直接用txt文本文档改原本图片的名称和后缀名创建的,
用来模拟原本的图片名称和后缀名.
2023年06月16日 星期五
@echo off
@REM @Author: xianghongai@gmail.com
title 通过文本内容重命名文件
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
|
|