[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

本帖最后由 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
复制代码

TOP

回复 2# aloha20200628


    谢谢大神,但似乎不成功,我没有任何基础,您能帮忙再看看吗?
走自己的路,让别人无路可活

TOP

回复 2# aloha20200628


    将文件夹内的所有文件名前面的数字及字母除掉并在前面加上文件夹名称,如3005-85001 侧裙  ,3005-85001 左前边裙 依次重新命名
走自己的路,让别人无路可活

TOP

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

回复 3# gaoyh2008

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

TOP

回复 4# gaoyh2008


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

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# gaoyh2008

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


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

无任何基础,pause很重要
bat小白,请多指教!谢谢!

TOP

回复 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
复制代码

TOP

返回列表