Board logo

标题: [文件操作] 求助批处理实现文件名替换 [打印本页]

作者: FU586097    时间: 2024-12-25 15:33     标题: 求助批处理实现文件名替换

各位老师好  麻烦大家帮忙解决使用BAT批量修改文件名  一个文件夹里面有  A (1)  A (2)  A (3) A (4) A (5)  按顺序替换为 北京 上海  天津 广州 海南  (不需要替换为英文) 非常感谢各位老师帮忙
作者: aloha20200628    时间: 2024-12-25 17:04

本帖最后由 aloha20200628 于 2024-12-25 21:52 编辑

回复 1# FU586097
  1. @echo off &setlocal enabledelayedexpansion
  2. for %%a in (
  3.    "a (1)=北京"
  4.    "a (2)=上海"
  5.    "a (3)=天津"
  6.    "a (4)=广州"
  7.    "a (5)=海南" ) do set %%a
  8. for /f "delims=" %%F in ('dir /b/a-d "a*).docx" ') do if "!%%~nF!" neq "" ren "%%F" "!%%~nF!%%~xF%"
  9. pause&exit/b
复制代码

作者: FU586097    时间: 2024-12-25 20:33

回复 2# aloha20200628
谢谢老师 试试无效
作者: aloha20200628    时间: 2024-12-25 20:45

本帖最后由 aloha20200628 于 2024-12-25 20:51 编辑

回复 3# FU586097

请检查真实文件名格式与代码中的字面量如 "a (1)" 是否完全一致?真有空格?是英文括号还是中文括号?
再用 chcp 命令检查当前系统码页是 936 还是 65001 ?

作者: FU586097    时间: 2024-12-25 20:48

本帖最后由 FU586097 于 2024-12-25 20:54 编辑

回复 4# aloha20200628


    谢谢老师  这个不懂  再用 chcp 命令检查当前系统码页是 936 还是 65001 ?
   A (1) A (2) A (3) A (4) A (5)  检查了 这个相同   这些是复制粘贴的
作者: aloha20200628    时间: 2024-12-25 21:00

回复 5# FU586097

命令行直接键入 chcp 回车,看其返回值是 936 还是 65001

作者: FU586097    时间: 2024-12-25 21:12

回复 6# aloha20200628
  谢谢老师  是936
作者: aloha20200628    时间: 2024-12-25 21:30

回复 7# FU586097

2楼代码假定被处理的文件名格式如 "a (n).txt" ,其中 n=1,2,... 其扩展名 .txt 任意,要求相应改为 北京.txt, 上海.txt, ... 再请楼主确认是否如此?

作者: FU586097    时间: 2024-12-25 21:43

本帖最后由 FU586097 于 2024-12-25 21:45 编辑

回复 8# aloha20200628
谢谢老师  扩展名都是  A (1).docx  这个  老师改为这个扩展名
作者: aloha20200628    时间: 2024-12-25 22:00

本帖最后由 aloha20200628 于 2024-12-25 22:01 编辑

回复 9# FU586097

模拟了经楼主确认的一楼示例样本,用2楼代码测试已通过》当前文件夹下的 a (n).docx 共5个文件依据其对应序号 n 被更名为 北京.docx, 上海.docx, ...

作者: FU586097    时间: 2024-12-25 22:17

回复 10# aloha20200628


    谢谢老师 我试了怎么没有效果?
作者: FU586097    时间: 2024-12-25 22:21

回复 10# aloha20200628

BAT保存时提示 C:\Users\FU8989\Desktop\新建文件夹\A (1).BAT
该文件含有Unicode 格式的字符,当文件保存为 ANSI编码的文本文
件时,该字符将丢失。要保存 Unicode信息,单击下面的“取消”,然
后从编码列表中选择一个Unicode选项。继续吗?
作者: aloha20200628    时间: 2024-12-25 22:23

回复 11# FU586097

2楼代码用记事本(ansi 编码)存为 test.bat 运行,与被处理的 *.docx 源文件同目录...

作者: FU586097    时间: 2024-12-25 22:34

回复 13# aloha20200628


    谢谢老师 保存时提示后  编辑里面有好多  ?号
作者: FU586097    时间: 2024-12-25 22:35

回复 13# aloha20200628
老师 能加个微信帮忙一下吗  13698925126
作者: FU586097    时间: 2024-12-25 22:38

回复 13# aloha20200628


    老师谢谢  怎样上传图片给你看
作者: aloha20200628    时间: 2024-12-25 22:46

回复 14# FU586097

系统是win7 ? win8 ? win10 ? win11 ?

作者: FU586097    时间: 2024-12-25 22:47

回复 17# aloha20200628


     win10
作者: aloha20200628    时间: 2024-12-25 22:53

回复 16# FU586097
参见其中 ‘如何上传’ http://www.bathome.net/redirect. ... o=lastpost#lastpost
作者: aloha20200628    时间: 2024-12-25 23:01

回复 18# FU586097

文件夹中要处理的 *.docx 文件用 dir /b a*.docx 作个列表结果,粘贴出来一看便知了...

作者: FU586097    时间: 2024-12-25 23:01

回复 19# aloha20200628


   谢谢老师 这么长时间的耐心帮忙  非常感谢  弄好了  很满意
作者: FU586097    时间: 2024-12-25 23:06

回复 20# aloha20200628

老师 谢谢 找到一个这样的代码  但是它只能替换为数字或者英文  不能替换为中文  麻烦你看看能设置为替换中文吗  代码如下

       ren A (1).docx AA.docx
       ren A (2).docx BB.docx
       ren A (3).docx CC.docx
       ren A (4).docx DD.docx
       ren A (5).docx EE.docx
作者: aloha20200628    时间: 2024-12-25 23:46

回复 22# FU586097

若用一比一的固定代码写,改为如下即可
  1. ren "A (1).docx" "北京.docx"
  2. ren "A (2).docx" "上海.docx"
  3. ren "A (3).docx" "天津.docx"
  4. ren "A (4).docx" "广州.docx"
  5. ren "A (5).docx" "海南.docx"
复制代码

作者: FU586097    时间: 2024-12-26 00:01

回复 23# aloha20200628
谢谢老师 太好了  如如果不是docx    是文件夹怎样修改代码  或者txt  Excel  呢   谢谢
作者: qixiaobin0715    时间: 2024-12-26 08:50

回复 24# FU586097
你可以将文件或文件夹对应的重命名名称一行一组保存在一个文本文件中,格式如下:
1.txt
  1. "A (1).*":"北京.*"
  2. "A (2).*":"上海.*"
  3. "A (3).*":"天津.*"
  4. "A (4).*":"广州.*"
  5. "A (5).*":"海南.*"
  6. "A (1)":"中华"
  7. "A (2)":"人民"
复制代码
文件名写成XXX.*的形式
批处理代码如下:
test.bat
  1. @echo off
  2. for /f "tokens=1,2 delims=:" %%i in (1.txt) do if exist "%%i" ren "%%i" "%%j"
  3. pause
复制代码

作者: FU586097    时间: 2024-12-26 08:54

回复 19# aloha20200628


    老师早上好  我自已全弄好了 谢谢你对我这个项目帮助  麻烦你了 :handshake :handshake
作者: FU586097    时间: 2024-12-26 08:56

回复 25# qixiaobin0715


    谢谢老师 好用
作者: aloha20200628    时间: 2024-12-26 11:40

回复 26# FU586097

【仅供参考】与楼主爬楼20+层,从代码原版中 ‘更名字典的内存定义’ 到最后的 ‘一比一直接更名’... 总结之,还是把一行流代码与更名字典混编一体(存为 test.bat 运行一气呵成)更为简洁高效,看以下代码...
  1. @echo off &(for /f "delims=" %%a in ('more +2 "%~f0" ') do (ren %%a)) 2>nul &exit/b
  2. ::以下是更名字典
  3. "a (1).*" "北京.*"
  4. "a (2).*" "上海.*"
  5. "a (3).*" "天津.*"
  6. "a (4).*" "广州.*"
  7. "a (5).*" "海南.*"
复制代码

作者: czjt1234    时间: 2024-12-26 13:00

本帖最后由 czjt1234 于 2024-12-26 13:03 编辑

............................
作者: FU586097    时间: 2024-12-26 21:11

回复 28# aloha20200628


    谢谢老师 很好




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2