标题: [文件操作] 求BAT或VBS判断文件名超过一定长度只保存局部主文件名前面的指定字符 [打印本页]
作者: happyaya 时间: 2019-1-10 09:40 标题: 求BAT或VBS判断文件名超过一定长度只保存局部主文件名前面的指定字符
本帖最后由 happyaya 于 2019-1-10 10:14 编辑
求批处理或者VBS:在一个指定目录及该目录下的所有子目录,(例如目录下有不同格式文件:无规则命名、没规律位数的文件名、超长文件名、不同格式的文件或者可指定只修改那几种格式的扩展名文件)。判断文件主文件名长度当主文件名字符位数不超过40位字符时,不对该文件名做任何操作,如主文件名超过40个字符位数,则重命名并只保存主文件名前面40位字符数长度的主文件名,扩展名不变;但当如果有多个主文件名前40位字符完全相同的文件则需要相应的40位字符后附加一下001、002……规则,防止重名不能保存。
因为本身没什么基础,自己翻阅了好多资料硬是鼓捣不出来,请教一下众大神看能否实现?先拜谢了,各位前辈请赐教。
作者: ivor 时间: 2019-1-10 11:54
本帖最后由 ivor 于 2019-1-10 14:14 编辑
- Function GenerateNewName{
- Param( [System.IO.FileInfo]$FilePath )
- $int = 0
- while(test-Path $FilePath.FullName){
- $int ++
- $FilePath = "{0}\{1}{2:D3}{3}" -f ($FilePath.DirectoryName,(([char[]]$FilePath.BaseName)[0..39] -join ""),$int,$FilePath.Extension)
- }
- Return $FilePath.FullName
- }
-
- dir C:\ceshi -File -Recurse | %{if (($_.BaseName).Length -gt 40){Move-Item $_.FullName (GenerateNewName($_)) -Verbose}}
复制代码
作者: happyaya 时间: 2019-1-10 15:02
本帖最后由 happyaya 于 2019-1-10 15:11 编辑
ivor 发表于 2019-1-10 11:54
您好,该代码测试了一下貌似都无法执行呀,求赐教。是不是我系统是Winodws7只支持Powershell 2.0的原因。
作者: ivor 时间: 2019-1-10 15:36
本帖最后由 ivor 于 2019-1-10 15:37 编辑
- Function GenerateNewName{
- Param( [System.IO.FileInfo]$FilePath )
- $int = 0
- while(test-Path $FilePath.FullName){
- $int ++
- $FilePath = "{0}\{1}{2:D3}{3}" -f ($FilePath.DirectoryName,(([char[]]$FilePath.BaseName)[0..39] -join ""),$int,$FilePath.Extension)
- }
- Return $FilePath.FullName
- }
-
- dir C:\ceshi -Recurse | %{if ($_ -is [System.IO.FileInfo] -and ($_.BaseName).Length -gt 40){Move-Item $_.FullName (GenerateNewName($_)) -Verbose}}
复制代码
作者: happyaya 时间: 2019-1-10 16:06
回复 4# ivor
安装更新了powershell 3.0问题解决,谢谢。
作者: happyaya 时间: 2019-1-11 11:28
回复 1# happyaya
您好,麻烦再咨询一下,还存着一种情况,条件规则就是当有两个文件,主文件名完全相同,只是不同文件格式,比如XXX.jpg、XXX.txt。但这两个文件就算文件名超长改名加数字规则后还是必须得要保证主文件名完全相同,因为是配套注释文件。这又能否可以实现?
作者: happyaya 时间: 2019-1-11 11:28
回复 2# ivor
您好,麻烦再咨询一下,还存着一种情况,条件规则就是当有两个文件,主文件名完全相同,只是不同文件格式,比如XXX.jpg、XXX.txt。但这两个文件就算文件名超长改名加数字规则后还是必须得要保证主文件名完全相同,因为是配套注释文件。这又能否可以实现?
作者: ivor 时间: 2019-1-11 14:47
- Function GenerateNewName{
- Param( [System.IO.FileInfo]$FilePath )
- $int = 0
- if($pool.ContainsKey($FilePath.BaseName)){
- $FilePath = "{0}\{1}{2}" -f ($FilePath.DirectoryName,$pool[$FilePath.BaseName],$FilePath.Extension)
- }
- while(test-Path $FilePath.FullName){
- $int ++
- $FilePath = "{0}\{1}{2:D3}{3}" -f ($FilePath.DirectoryName,(([char[]]$FilePath.BaseName)[0..39] -join ""),$int,$FilePath.Extension)
- }
- $pool[$FilePath.BaseName]=$FilePath.BaseName
-
- Return $FilePath.FullName
- }
- $pool = @{}
- dir C:\ceshi -Recurse | %{if ($_ -is [System.IO.FileInfo] -and ($_.BaseName).Length -gt 40){
- Move-Item $_.FullName (GenerateNewName($_)) -Verbose
- }}
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |