Board logo

标题: [文件操作] 求助批处理重命名文件名保留文件夹名和中文字符 [打印本页]

作者: gaoyh2008    时间: 2024-4-20 10:42     标题: 求助批处理重命名文件名保留文件夹名和中文字符

需要将文件夹内的多个子文件重命名,规则是只保留子文件名称中的中文字符后在前面加上文件夹的名称做前缀作为新的子文件名称  如:文件夹名+保留下来的中文字符。希望大神出手相助给个BAT处理,谢谢!
作者: aloha20200628    时间: 2024-4-20 14:54

本帖最后由 aloha20200628 于 2024-4-20 15:02 编辑


当前目录及其子目录中所有包含中文字符(中文标点等特殊符号除外)的文件名更名为 “所在目录名+被提取的中文字符”,文件名中未含中文字符则不予更名
  1. @echo off &setlocal enabledelayedexpansion
  2. for /f "delims=" %%F in ('dir/b/s/a-d') do (
  3. set "nH=" & (call :getHZ "%%~nF" nH)
  4. if defined nH for %%P in ("%%~pF.") do (echo,ren "%%~F" "%%~nP+!nH!%%~xF")
  5. )
  6. exit/b
  7. :getHZ
  8. set "$s=%~1"&set "_s="
  9. for /L %%n in (0 1 260) do (
  10.    set "c=!$s:~%%n,1!" &if "!c!"=="" set "%~2=!_s!" &exit/b
  11.    if "!c!" gtr "Z" set "_s=!_s!!c!"
  12. )
  13. exit/b
复制代码

作者: gaoyh2008    时间: 2024-4-20 20:20

回复 2# aloha20200628


    谢谢大神,但似乎不成功,我没有任何基础,您能帮忙再看看吗?
作者: gaoyh2008    时间: 2024-4-20 20:30

回复 2# aloha20200628


    将文件夹内的所有文件名前面的数字及字母除掉并在前面加上文件夹名称,如3005-85001 侧裙  ,3005-85001 左前边裙 依次重新命名
作者: aloha20200628    时间: 2024-4-20 21:10

本帖最后由 aloha20200628 于 2024-4-20 21:43 编辑

回复 3# gaoyh2008

“似乎不成功”是啥意思? 是提取汉字错误还是未能提取汉字?还是其他什么...?
再明确一下》2楼代码存为 test.bat 须放在被处理文件的目录中运行!

作者: Batcher    时间: 2024-4-21 09:00

回复 4# gaoyh2008


请编辑顶楼帖子内容,给一个真实的例子说明一下你的需求吧,比如操作之前是怎样的,操作之后变成啥样?
否则大家帮你写的代码也许可以处理假设的需求,但是无法处理你真实的需求。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: 77七    时间: 2024-4-21 11:28

回复 3# gaoyh2008

试试
   2楼代码第6行改为
  1. pause & exit/b
复制代码


显示内容正确再把第4行的 echo, 删掉,再执行一次

无任何基础,pause很重要
作者: aloha20200628    时间: 2024-4-21 12:27

回复 3# gaoyh2008

抱歉!居然只发了一个预览版代码
感谢7楼提点
实用版代码如下...
  1. @echo off &setlocal enabledelayedexpansion
  2. for /f "delims=" %%F in ('dir/b/s/a-d') do (
  3. set "nH=" & (call :getHZ "%%~nF" nH)
  4. if defined nH for %%P in ("%%~pF.") do (ren "%%~F" "%%~nP+!nH!%%~xF")
  5. )
  6. pause&exit/b
  7. :getHZ
  8. set "$s=%~1"&set "_s="
  9. for /L %%n in (0 1 260) do (
  10.    set "c=!$s:~%%n,1!" &if "!c!"=="" set "%~2=!_s!" &exit/b
  11.    if "!c!" gtr "Z" set "_s=!_s!!c!"
  12. )
  13. exit/b
复制代码





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