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


    已上传,感谢版主

TOP

14楼修改了

TOP

回复 17# flashercs


    万分感谢兄弟 成功

TOP

回复 17# flashercs


    再贪婪的问一下,因为有些文件是不同版本,文件名是一样的,能不能实现同样文件名文件,后面加上txt.1,txt.2这样的,谢谢了

TOP

回复 19# ziranww
  1. @echo off
  2. set "dir=E:\test"
  3. powershell -Command "(Select-String -Path '%dir%\*.*' -Pattern '(?<=model_name[\x00-\x1F\uFFFD]+)[^\x00-\x1F\uFFFD]+(?=[\x00-\x1F\uFFFD]*disp_outl_info)' -Encoding utf8)|ForEach-Object {$baseName = $_.Matches[0].Value + [System.IO.Path]::GetExtension($_.Path); $i = 0; $newName = $baseName; while ($true) {try {Rename-Item -LiteralPath $_.Path -NewName $newName -ErrorAction Stop; break; }catch {$newName = $baseName + '.' + (++$i); }}}"
复制代码

TOP

回复 20# flashercs


    谢谢大神,完美

TOP

回复 20# flashercs


    大神再问一下,我11点多执行的脚本,到现在还没有结束,大概1W多个文件,11G多点。看任务管理器,CPU还有占用的,30%不到点,硬盘读写基本上没有了,之前看是有一点的
是不是文件太多了?

TOP

本帖最后由 flashercs 于 2019-1-31 19:42 编辑

加个进度看看吧,不知处理到哪里了。
  1. @echo off
  2. REM UTF8编码,过滤控制字符和UTF8不能识别的字符后,选择字符串作为文件名并重命名文件。
  3. set "dir=%~dp0."
  4. powershell -Command "foreach ($item in (Get-ChildItem -LiteralPath \"%dir%\" -Filter *.* -File)) { if ([System.IO.File]::ReadAllText($item.FullName, [System.Text.Encoding]::UTF8) -match '(?<=model_name[\x00-\x1F\uFFFD]+)[^\x00-\x1F\uFFFD]+(?=[\x00-\x1F\uFFFD]*disp_outl_info)') { $baseName = $Matches[0] + $item.Extension; $i = 0; $newName = $baseName; while (Test-Path -LiteralPath (Join-Path -Path $item.DirectoryName -ChildPath $newName)) { $newName = $baseName + '.' + (++$i);} Write-Host 'Renaming file ' -NoNewline; Write-Host $item.FullName -NoNewline -ForegroundColor Green; Write-Host ' to ' -NoNewline; Write-Host $newName -ForegroundColor Green; Rename-Item -LiteralPath $item.FullName -NewName $newName; }}"
  5. pause
  6. exit /b
复制代码

TOP

回复 23# flashercs


    好像提示有点问题
Renaming file E:\test\1246.prt to ZKQ3003003.prt
Rename-Item : 无法重命名,因为“1246.prt”处不存在项。
所在位置 行:1 字符: 637
+ ... oundColor Green; Rename-Item -LiteralPath $item -NewName $newName; }}
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: ( [Rename-Item],PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

TOP

回复 24# ziranww

                                      
已修改

TOP

回复 25# flashercs


    好的,不把文件后缀改成txt直接处理会不会有问题?

TOP

回复 26# ziranww


    测试目录测试一下!
默认筛选的是 *.*

TOP

  1. @echo off &setlocal enabledelayedexpansion
  2. for /r %%a in (*.txt) do (
  3.   call:r %%a
  4. )
  5. goto:eof
  6. :r
  7.   for /f %%i in ('smooth %1 ^|findstr model_name') do (
  8.     set c=%%i
  9.     set k=!c:~0,10!
  10.     set v=!c:~10!
  11.     if "!k!" equ "model_name" (
  12.       if "!v!" neq "" (
  13.         rename %1 !v!
  14. if errorlevel 0 (echo %1 to !v!) else (echo %1 to !v! ---- fail)
  15. goto:eof
  16.       )
  17.     )
  18.   echo %1 ---- not found
  19.   )
复制代码
https://pan.baidu.com/s/1o23mHiKZBrfNq_P73SVG9A
重在参与!

TOP

回复 27# flashercs


    你好,兄弟,用你的脚本把所有文件处理好了,现在又发现一个问题,重命名后的文件名比如是这样的:
a.prt
a.prt.1
a.prt.2
a.prt.3
.....
a.prt.250
我看了一下最大的文件到250,之前没注意,文件名应该是第一个开始就加.1,应该是这样的
a.prt.1
a.prt.2
a.prt.3
a.prt.4
.....
a.prt.251

我用原来找的几个批量命名的软件都无法实现扩展名,再求一个批量的脚本,谢谢了

TOP

回复 29# ziranww

RenameFiles.bat
  1. @echo off
  2. REM 重命名文件为其扩展名序号+1
  3. set "dir=E:\Dest\dest3"
  4. Powershell -Command "(Get-ChildItem -LiteralPath \"%dir%\" -Filter '*.*' -File|ForEach-Object {$ext = $_.Extension.Substring(1); if ($ext -match '^\d+$') {$id = [int]$ext}else {$id = 0}[PSCustomObject]@{'id' = $id; 'fileInfo' = $_}})|Sort-Object -Descending -Property 'id'|ForEach-Object {if ($_.id -ne 0) {$newName = $_.fileInfo.BaseName}else {$newName = $_.fileInfo.Name}$newName = $newName + '.' + ($_.id + 1); Write-Host ('Rename File \"' + $_.fileInfo.FullName + '\" to \"' + $newName + '\"'); Rename-Item -LiteralPath $_.fileInfo.FullName -NewName $newName}"
  5. pause
  6. exit /b
复制代码

TOP

返回列表