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

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

【新问题】如下:
现在如果是文件夹中含子文件夹,同时删除后面的汉字后,前面的字符串的文件夹名可能一样,目前楼下【版主】和【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奶茶比例



请大侠们帮忙修改一下?

本帖最后由 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

评分人数

TOP

没搞太懂,是删除 . 后面所有的汉字?还是最后的非汉字后面的汉字?

TOP

本帖最后由 taofan712 于 2017-5-28 23:19 编辑

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

汉123字
汉字a2
汉2字汉  3字3
—  aa汉#字
汉字
123字
a  2字

TOP

回复 3# 老刘1号[/


是要删除字符串后面的汉字。字符串里面包括字母,数字,-和.

TOP

回复 2# taofan712


   我测试一下!!

TOP

回复 4# taofan712


    您好,把小数点删除掉了??

TOP

需要保留住小数点,如C23-GH3421-34.00023 飞蝗芜湖      变成  C23-GH3421-34.00023

刚才的代码把34后面的小数点.也删除了

TOP

本帖最后由 taofan712 于 2017-5-28 23:33 编辑

回复 7# 172043209


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


但在以下情况会出现其他问题:
文件名本身就不含有汉字的文件夹数量在2个以上。
除汉字以外剩余的字母数字部分相同的文件夹数量在2个以上。
其他

TOP

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. [判断] = True
  8. While [判断]
  9. If Clng("&H" & Hex(Asc(Right(FileBaseName,1)))) > 255 Then
  10. FileBaseName=Left(FileBaseName,Len(FileBaseName)-1)
  11. Else
  12. [判断]=False
  13. End If
  14. Wend
  15. fso.MoveFile file.Path,file.ParentFolder&"\"&FileBaseName&"."&FileExtName
  16. Next
复制代码
1

评分人数

TOP

回复 2# taofan712


    OK,感谢感谢,测试成功,加了一个符号,可以保留住小数点符号了,想再问一下,如果是想处理当前文件加下子文件名修改一下哪里?

TOP

回复 11# 172043209


    第三行,dir /b /ad改为dir /b /ad /s

TOP

回复 11# 172043209


    测试下我的,存为test.vbs

TOP

回复 13# 老刘1号


    大侠,我测试了,你的是删除的文件,不是文件夹,备用,说不一定我也用的上的

TOP

回复 14# 172043209


    ……尴尬了,原来是文件夹

TOP

返回列表