老刘1号[/
是要删除字符串后面的汉字。字符串里面包括字母,数字,-和.
作者: 172043209 时间: 2017-5-28 23:21
回复 2# taofan712
我测试一下!!
作者: 172043209 时间: 2017-5-28 23:23
回复 4# taofan712
您好,把小数点删除掉了??
作者: 172043209 时间: 2017-5-28 23:26
需要保留住小数点,如C23-GH3421-34.00023 飞蝗芜湖 变成 C23-GH3421-34.00023
刚才的代码把34后面的小数点.也删除了
作者: taofan712 时间: 2017-5-28 23:30
本帖最后由 taofan712 于 2017-5-28 23:33 编辑
回复 7# 172043209
在第六行,abcd那里,找个位置加上小数点就行。
但在以下情况会出现其他问题:
文件名本身就不含有汉字的文件夹数量在2个以上。
除汉字以外剩余的字母数字部分相同的文件夹数量在2个以上。
其他
作者: 老刘1号 时间: 2017-5-28 23:33
test.vbs- Dim fso
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set ThisFolder=fso.GetFolder(".")
- For Each file In thisfolder.Files
- FileBaseName=fso.GetBaseName(File.Name)
- FileExtName=fso.GetExtensionName(File.Name)
-
- [判断] = True
- While [判断]
- If Clng("&H" & Hex(Asc(Right(FileBaseName,1)))) > 255 Then
- FileBaseName=Left(FileBaseName,Len(FileBaseName)-1)
- Else
- [判断]=False
- End If
- Wend
-
- fso.MoveFile file.Path,file.ParentFolder&"\"&FileBaseName&"."&FileExtName
- Next
复制代码
作者: 172043209 时间: 2017-5-28 23:35
回复 2# taofan712
OK,感谢感谢,测试成功,加了一个符号,可以保留住小数点符号了,想再问一下,如果是想处理当前文件加下子文件名修改一下哪里?
作者: taofan712 时间: 2017-5-28 23:36
回复 11# 172043209
第三行,dir /b /ad改为dir /b /ad /s
作者: 老刘1号 时间: 2017-5-28 23:37
回复 11# 172043209
测试下我的,存为test.vbs
作者: 172043209 时间: 2017-5-29 00:00
回复 13# 老刘1号
大侠,我测试了,你的是删除的文件,不是文件夹,备用,说不一定我也用的上的
作者: 老刘1号 时间: 2017-5-29 00:01
回复 14# 172043209
……尴尬了,原来是文件夹
作者: 172043209 时间: 2017-5-29 00:26
回复 12# taofan712
这样改后测试不成功(想删除当前文件夹下的子文件夹的文件名中后面的汉字),把原来的文件夹名前面加上了路径,变成了【CUsersAdministratorDesktop批量挂接数据处理新建文件夹C01-2019-JX13-2.00031979-JX13-2.0016切勿】
谢谢!
作者: taofan712 时间: 2017-5-29 01:46
回复 16# 172043209 - @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /ad /s') do (
- set "fn=%%~nxa"
- set "fnw=%%~nxa"
- for /f "tokens=1-5 delims=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.- " %%1 in ("%%~nxa") do (
- if not "%%1%%2%%3%%4%%5"=="%%~a" (
- call :change %%1 %%2 %%3 %%4 %%5
- ) else (
- ren "!fn!" chunhanzi 2>nul || ren "!fn!" chunhanzi_1
- )
- )
- )
- echo;处理完毕&pause>nul&exit /b
-
- :change
- for %%b in (%1 %2 %3 %4 %5) do set "fnw=!fnw:%%b=!"
- set "fnw=!fnw: =!"
- ren "!fn!" "!fnw!" 2>nul ||ren "!fn!" "!fnw!_1"
- goto :eof
复制代码
作者: 172043209 时间: 2017-5-29 08:48
回复 17# taofan712
测试没成功,提示:系统找不到指定文件
对当前同目录下的可执行,对于修改的文件夹下的子级文件夹还是不行,不知道原因在哪里?
作者: pcl_test 时间: 2017-5-29 11:16
本帖最后由 pcl_test 于 2017-5-29 23:02 编辑
- @echo off
- powershell ^
- ^<#去掉-r则不处理子文件夹#^>^
- dir . -r^|?{$_ -is [System.IO.DirectoryInfo]}^|^
- sort {$_.FullName.length} -desc^|%%{^
- $tmpname=($_.Name -replace '[\u4e00-\u9fa5]').trim();^
- write-host $_.FullName.replace('%~dp0','.\') -nonewline;^
- if($tmpname -and ($tmpname -ne $_.Name)){^
- $newname=$_.Parent.FullName+'\'+$tmpname;^
- $n=0;^
- while(Test-Path -LiteralPath $newname){^
- $n++;^
- $newname=$_.Parent.FullName+'\'+$tmpname+'_'+$n;^
- };^
- mv -LiteralPath $_.FullName $newname;^
- write-host (' --^> '+($newname.split('\')[-1])) -ForegroundColor green;^
- }else{^
- write-host ' --^> 为纯汉字或不含汉字,不处理' -ForegroundColor red;^
- }^
- }
- pause
复制代码
作者: 老刘1号 时间: 2017-5-29 11:28
回复 19# pcl_test
原来unicode 4e00-9fa5是汉字的范围啊……
直接干掉所有双字节字符的路过……
作者: pcl_test 时间: 2017-5-29 11:36
回复 20# 老刘1号
就顶楼所描述的问题而言,干掉双字节字符妥妥的
作者: 172043209 时间: 2017-5-29 12:20
要是再加上一个是否删除子文件夹名中汉字的提示就好了,y, 删除 or N, 路过
谢谢版主及其他两位!!
作者: 172043209 时间: 2017-6-3 12:48
现在如果是文件夹中含子文件夹,同时删除后面的汉字后,前面的字符串的文件夹名可能一样,程序的处理结果是在第二个文件名加了一个“_1”,我希望把有重复的时候,就把文件夹的内容合并,请问怎么修改?
按照12楼的建议 将 第三行,dir /b /ad改为dir /b /ad /s 闪屏后没有结果
作者: taofan712 时间: 2017-6-5 08:12
- @echo off
- setlocal enabledelayedexpansion
- echo;请将需要处理的文件夹拖放进本窗口
- set /p folder=
- for /f "delims=" %%i in ('dir /ad /s /b %folder%') do set/a n+=1&&set .!n!=%%~fi
- (for /l %%n in (!n!,-1,1) do if defined .%%n echo;!.%%n!)>tmp.x
- for /f "delims=" %%a in (tmp.x) do (
- cd /d "%%~fa"\..
- set "fn=%%~nxa"
- set "fnw=%%~nxa"
- for /f "tokens=1-5 delims=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-." %%1 in ("%%~nxa") do (
- if not "%%1%%2%%3%%4%%5"=="%%~nxa" (
- call :change "%%1" "%%2" "%%3" "%%4" "%%5"
- ) else (
- call :chun
- )
- )
- )
- cd /d "%~dp0"&del /f /q tmp.x
- echo;处理完毕&pause>nul&exit /b
-
- :change
- for %%b in (%~1 %~2 %~3 %~4 %~5) do set "fnw=!fnw:%%b=!"
- set "fnw=!fnw: =!"
- set /a m=1
- if exist !fnw! (
- :judge
- if exist !fnw!_!m! (
- set /a m+=1
- goto judge
- )
- ren "!fn!" "!fnw!_!m!"
- goto :eof
- )
- ren "!fn!" "!fnw!"
- goto :eof
-
- :chun
- set /a m=1
- if exist chunhanzi (
- :panduan
- if exist chunhanzi_!m! (
- set /a m+=1
- goto panduan
- )
- ren "!fn!" chunhanzi_!m!
- goto :eof
- )
- ren "!fn!" chunhanzi
- goto :eof
复制代码
作者: 172043209 时间: 2017-6-5 08:38
回复 24# taofan712
您好,这么早给我回复,谢谢了。条件是当删除文件夹名中汉字的时候,考虑到了不会有同名文件(如果合并文件夹时有同名文件可考虑在文件后面加序号,文件夹不用),对于子文件夹的问题,一般情况不会有很多层2-3,可能程序上会是一样的,是的,存在一个先处理子文件夹,再父文件夹,目前我需要处理用到的是bat程序放的文件夹再下面一层文件夹,如文件夹名123,123里面有多个文件夹1-a、1-b,...在这一级放置bat处理程序,处理各个1-a、1-b,...下面的文件夹名(这个时候的文件夹内就是文件了),先写完,随后测试。再次谢谢!马上测试。看到你在群里研究这个了。
刚测试了,拖入需要处理的文件夹,回车闪屏了??请问怎么回事,我上传一个测试文件,还请taofan712检查一下!!
作者: pcl_test 时间: 2017-6-5 14:50
回复 23# 172043209 - @echo off
- powershell ^
- ^<#去掉-r则不处理子文件夹#^>^
- dir . -r^|?{$_ -is [System.IO.DirectoryInfo]}^|^
- sort {$_.FullName.length} -desc^|%%{^
- $tmpname=($_.Name -replace '[\u4e00-\u9fa5]').trim();^
- write-host $_.FullName.replace('%~dp0','.\') -nonewline;^
- if($tmpname -and ($tmpname -ne $_.Name)){^
- $newname=$_.Parent.FullName+'\'+$tmpname;^
- if(Test-Path -LiteralPath $newname){^
- dir -LiteralPath $_.FullName^|%%{^
- $subname=$newname+'\'+$_.Name;^
- $n=0;^
- while(Test-Path -LiteralPath $subname){^
- $n++;^
- if($_ -is [System.IO.DirectoryInfo]){^
- $subname=$newname+'\'+$_.Name+'_'+$n;^
- }else{^
- $subname=$newname+'\'+$_.BaseName+'_'+$n+$_.Extension;^
- };^
- };^
- mv -LiteralPath $_.FullName $subname;^
- };^
- del -LiteralPath $_.FullName -Force;^
- write-host (' --^> '+($newname.split('\')[-1])+' 重名项,合并处理') -ForegroundColor yellow;^
- }else{^
- mv -LiteralPath $_.FullName $newname;^
- write-host (' --^> '+($newname.split('\')[-1])) -ForegroundColor green;^
- };^
- }else{^
- write-host ' --^> 为纯汉字或不含汉字,不处理' -ForegroundColor red;^
- }^
- }
- pause
复制代码
作者: llinnn 时间: 2021-1-13 11:28
test.vbs
老刘1号 发表于 2017-5-28 23:33
在这个基础上再删除一下文件名结尾的特定一个字母要怎么添加呢?意思就是说每个文件的结尾都有一个固定的字母J,我也不保留,只保留数字,删除所有的汉字跟字母
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |