找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28703|回复: 7

[文件操作] 求助批处理重命名文件名保留文件夹名和中文字符

[复制链接]
发表于 2024-4-20 10:42:20 | 显示全部楼层 |阅读模式
需要将文件夹内的多个子文件重命名,规则是只保留子文件名称中的中文字符后在前面加上文件夹的名称做前缀作为新的子文件名称  如:文件夹名+保留下来的中文字符。希望大神出手相助给个BAT处理,谢谢!
发表于 2024-4-20 14:54:24 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2024-4-20 20:20:56 | 显示全部楼层
回复 2# aloha20200628


    谢谢大神,但似乎不成功,我没有任何基础,您能帮忙再看看吗?
 楼主| 发表于 2024-4-20 20:30:58 | 显示全部楼层
回复 2# aloha20200628


    将文件夹内的所有文件名前面的数字及字母除掉并在前面加上文件夹名称,如3005-85001 侧裙  ,3005-85001 左前边裙 依次重新命名
发表于 2024-4-20 21:10:49 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-4-20 21:43 编辑

回复 3# gaoyh2008

“似乎不成功”是啥意思? 是提取汉字错误还是未能提取汉字?还是其他什么...?
再明确一下》2楼代码存为 test.bat 须放在被处理文件的目录中运行!
发表于 2024-4-21 09:00:04 | 显示全部楼层
回复 4# gaoyh2008


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

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
发表于 2024-4-21 11:28:02 | 显示全部楼层
回复 3# gaoyh2008

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


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

无任何基础,pause很重要
发表于 2024-4-21 12:27:55 | 显示全部楼层
回复 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 02:48 , Processed in 0.019426 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表