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

[文件操作] 批处理如何批量删除文件夹名中的汉字后,重名文件夹内容合并

[复制链接]
发表于 2017-5-28 16:48:13 | 显示全部楼层 |阅读模式
【新问题】如下:
现在如果是文件夹中含子文件夹,同时删除后面的汉字后,前面的字符串的文件夹名可能一样,目前楼下【版主】和【taofan712】提供的程序的处理结果是在第二个文件名加了一个“_1”来区分,现在希望把有删除汉字后文件夹名重复的时候,就把文件夹的内容合并,请问怎么修改?

另外【taofan712】提供的处理子文件夹按照12楼的建议 将  第三行,dir /b /ad改为dir /b /ad /s    闪屏后没有结果?


下面是原帖内容
帮忙修改一下:批量删除文件夹名中后面的中字
我现在比如有一批文件夹名字是   101-jx23-2.0002 奶茶12比例    或者   C01-jx23-2.0002奶茶比例     现在想删除后面的汉子
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%i in ('dir/ad/b *') do (
  4. call :hz "%%~ni"
  5. ren "%%i" "!fn!")
  6. goto :eof
  7. :hz
  8. set fn=%~1
  9. :begin
  10. echo !fn:~-1,4!|findstr /i "^[a-z0-9]*$">nul || (set fn=!fn:~,-1!&goto begin)
复制代码
这里删除的却是小数点后内容:.0002奶茶比例



请大侠们帮忙修改一下?
发表于 2017-5-28 23:00:13 | 显示全部楼层
本帖最后由 taofan712 于 2017-5-28 23:30 编辑

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /ad') do (
  4.     set "fn=%%~a"
  5.     set "fnw=!fn!"
  6.     for /f "tokens=1-5 delims=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.- " %%1 in ("%%~a") do (
  7.         if not "%%1%%2%%3%%4%%5"=="%%~a" (
  8.             call :change %%1 %%2 %%3 %%4 %%5
  9.         ) else (
  10.             ren "!fn!" chunhanzi 2>nul || ren "!fn!" chunhanzi_1
  11.         )
  12.     )
  13. )
  14. echo;处理完毕&pause>nul&exit /b

  15. :change
  16. for %%b in (%1 %2 %3 %4 %5) do set "fnw=!fnw:%%b=!"
  17. set "fnw=!fnw: =!"
  18. ren "!fn!" "!fnw!" 2>nul ||ren "!fn!" "!fnw!_1"
  19. goto :eof
复制代码
原以为不会太难,没想到在写的时候发现特殊情况会有很多,所以代码不是很完美。见谅。

评分

参与人数 2技术 +2 收起 理由
172043209 + 1 感谢感谢
老刘1号 + 1 乐于助人

查看全部评分

发表于 2017-5-28 23:09:42 | 显示全部楼层
没搞太懂,是删除 . 后面所有的汉字?还是最后的非汉字后面的汉字?
发表于 2017-5-28 23:18:16 | 显示全部楼层
本帖最后由 taofan712 于 2017-5-28 23:19 编辑

回复 3# 老刘1号
文件名设想成这种情况:

汉123字
汉字a2
汉2字汉  3字3
—  aa汉#字
汉字
123字
a  2字
 楼主| 发表于 2017-5-28 23:19:32 | 显示全部楼层
回复 3# 老刘1号[/


是要删除字符串后面的汉字。字符串里面包括字母,数字,-和.
 楼主| 发表于 2017-5-28 23:21:03 | 显示全部楼层
回复 2# taofan712


   我测试一下!!
 楼主| 发表于 2017-5-28 23:23:15 | 显示全部楼层
回复 4# taofan712


    您好,把小数点删除掉了??
 楼主| 发表于 2017-5-28 23:26:31 | 显示全部楼层
需要保留住小数点,如C23-GH3421-34.00023 飞蝗芜湖      变成  C23-GH3421-34.00023

刚才的代码把34后面的小数点.也删除了
发表于 2017-5-28 23:30:20 | 显示全部楼层
本帖最后由 taofan712 于 2017-5-28 23:33 编辑

回复 7# 172043209


    在第六行,abcd那里,找个位置加上小数点就行。


但在以下情况会出现其他问题:
文件名本身就不含有汉字的文件夹数量在2个以上。
除汉字以外剩余的字母数字部分相同的文件夹数量在2个以上。
其他
发表于 2017-5-28 23:33:58 | 显示全部楼层
test.vbs

  1. Dim fso
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. Set ThisFolder=fso.GetFolder(".")
  4. For Each file In thisfolder.Files
  5.         FileBaseName=fso.GetBaseName(File.Name)
  6.         FileExtName=fso.GetExtensionName(File.Name)
  7.        
  8.         [判断] = True
  9.         While [判断]
  10.                 If Clng("&H" & Hex(Asc(Right(FileBaseName,1)))) > 255 Then
  11.                         FileBaseName=Left(FileBaseName,Len(FileBaseName)-1)
  12.                 Else
  13.                         [判断]=False
  14.                 End If
  15.         Wend
  16.        
  17.         fso.MoveFile file.Path,file.ParentFolder&""&FileBaseName&"."&FileExtName
  18. Next
复制代码

评分

参与人数 1技术 +1 收起 理由
taofan712 + 1 厉害小伙 ~

查看全部评分

 楼主| 发表于 2017-5-28 23:35:12 | 显示全部楼层
回复 2# taofan712


    OK,感谢感谢,测试成功,加了一个符号,可以保留住小数点符号了,想再问一下,如果是想处理当前文件加下子文件名修改一下哪里?
发表于 2017-5-28 23:36:35 | 显示全部楼层
回复 11# 172043209


    第三行,dir /b /ad改为dir /b /ad /s
发表于 2017-5-28 23:37:42 | 显示全部楼层
回复 11# 172043209


    测试下我的,存为test.vbs
 楼主| 发表于 2017-5-29 00:00:29 | 显示全部楼层
回复 13# 老刘1号


    大侠,我测试了,你的是删除的文件,不是文件夹,备用,说不一定我也用的上的
发表于 2017-5-29 00:01:47 | 显示全部楼层
回复 14# 172043209


    ……尴尬了,原来是文件夹
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 10:15 , Processed in 0.025037 second(s), 11 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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