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

回复 8# myh17909
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. set 001=语文
  5. set 002=数学
  6. set 003=英语
  7. set 004=科学
  8. for /d %%A in (*) do (
  9.   if defined %%~nxA call :renexcept "%%~fA" "!%%~nxA!"
  10. )
  11. endlocal
  12. pause
  13. exit /b
  14. :renexcept
  15. setlocal enabledelayedexpansion
  16. pushd "%~1"|| goto :end
  17. set oldnames="%temp%\~%random%"
  18. set newnames="%temp%\~%random%"
  19. set oldexcept="%temp%\~%random%"
  20. set newexcept="%temp%\~%random%"
  21. set n=0
  22. >%oldnames% (
  23.   for /f "delims=" %%A in ('dir /ad /b') do (
  24.     echo %%~nxA
  25.     set /a n+=1
  26.     set "newlist[!n!]=%~2 (!n!)"
  27.   )
  28. )
  29. >%newnames% (for /f "tokens=1* delims==" %%A in ('set newlist[') do echo %%B)
  30. >%oldexcept% findstr /ilxvg:%newnames% %oldnames%
  31. >%newexcept% findstr /ilxvg:%oldnames% %newnames%
  32. @REM findstr is BUGey
  33. <%newexcept% (
  34.   for /f "usebackq delims=" %%A in (%oldexcept%) do (
  35.     set /p newname=
  36.     if defined newname (
  37.       echo ren "%%A" "!newname!"
  38.       ren "%%A" "!newname!"
  39.     )
  40.   )
  41. )
  42. del %oldnames% %newnames% %oldexcept% %newexcept%
  43. popd
  44. :end
  45. endlocal
  46. exit /b
复制代码
微信:flashercs
QQ:49908356

TOP

回复 10# myh17909


    楼上代码已修改, 是有问题吗?
微信:flashercs
QQ:49908356

TOP

回复 13# myh17909


    按资源管理器排序是个问题,与批处理排序规则不同,很麻烦的... 尤其是你这种要求,按序号排序.
  1. <#*,:&cls
  2. @echo off
  3. REM 这里是指目录下所有文件全部重命名.新文件名与旧文件名是一一对应的,顺序不能改变.
  4. REM 旧文件名集合是按照for列出的顺序.新文件名集合是自定义数组.
  5. REM 此法重命名次数最多
  6. setlocal enabledelayedexpansion
  7. cd /d "%~dp0"
  8. set 001=语文
  9. set 002=数学
  10. set 003=英语
  11. set 004=科学
  12. for /d %%A in (*) do (
  13.   if defined %%~nxA call :rentemp "%%~fA" "!%%~nxA!"
  14. )
  15. endlocal
  16. pause
  17. exit /b
  18. :rentemp
  19. setlocal enabledelayedexpansion
  20. pushd "%~1"|| goto end
  21. set n=0
  22. @REM 按Explorer排序规则排序
  23. for /f "delims=" %%A in ('dir /ad /b^|powershell -c "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~f0\" -ReadCount 0 | Out-String))) $input"') do (
  24.   REM 必须一一对应,如果新文件名已存在,则必须重命名为临时文件名,并保存到临时列表,数据格式:oldname/tempname/targetname
  25.   set /a n+=1
  26.   set "newname=%~2 (!n!)"
  27.   if not "!newname!"=="%%A" (
  28.     if exist "!newname!" (
  29.       call :getTempName
  30.       @REM echo ren "%%A" "!tempname!"
  31.      >nul 2>nul ren "%%A" "!tempname!" && set "templist[!n!]=%%A/!tempname!/!newname!"
  32.     ) else (
  33.       echo ren "%%A" "!newname!"
  34.       ren "%%A" "!newname!"
  35.     )
  36.   )
  37. )
  38. REM 重命名临时列表
  39. for /f "tokens=1* delims==" %%A in ('2^>nul set templist[') do (
  40.   for /f "tokens=1-3 delims=/" %%C in ("%%B") do (
  41.     echo ren "%%C" "%%E"
  42.     ren "%%D" "%%E"
  43.   )
  44. )
  45. popd
  46. :end
  47. endlocal
  48. exit /b
  49. :getTempName
  50. :loop
  51. set tempname=~%random%~
  52. if exist "%tempname%" goto loop
  53. @REM echo tempname=%tempname%
  54. exit /b
  55. #>
  56. param([psobject]$InputObject)
  57. Add-Type -TypeDefinition @'
  58. using System;
  59. using System.Collections.Generic;
  60. using System.Runtime.InteropServices;
  61. namespace MyCode
  62. {
  63.   public class ExplorerViewComparer : Comparer<string>
  64.   {
  65.     [DllImport("Shlwapi.dll", EntryPoint = "StrCmpLogical", CharSet = CharSet.Auto)]
  66.     internal static extern int StrCmpLogical(string p1, string p2);
  67.    
  68.     public override int Compare(string x, string y)
  69.     {
  70.       return StrCmpLogical(x, y);
  71.     }
  72.   }
  73. }
  74. '@
  75. # create comparer object
  76. $ExpComp = New-Object MyCode.ExplorerViewComparer
  77. $arrstr = [string[]]@($InputObject)
  78. [Array]::Sort($arrstr, $ExpComp)
  79. $arrstr
  80. trap {continue}
复制代码
微信:flashercs
QQ:49908356

TOP

返回列表