标题: [文件操作] 求助批处理,关于子文件夹批量命名的问题 [打印本页]
作者: myh17909 时间: 2022-5-8 20:24 标题: 求助批处理,关于子文件夹批量命名的问题
求助如图,需要将根目录下001文件夹中的各子文件夹批量重命名“语文-001”,“语文-002”,。。。直到全部命名完成。
同理,002,003,004文件夹也是一样。这个如何操作,恳请论坛上各位大神回复!好人一生平安,拜谢!
图片上传了好久一直传不进去,不知道什么原因。002的子文件夹需要修改为数学-001,数学-002,数学-003等等
003的是英语
004的是科学
麻烦哪位大神帮忙解决一下
图片链接https://imgtu.com/i/O3yVUg
作者: Batcher 时间: 2022-5-8 20:45
回复 1# myh17909
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: myh17909 时间: 2022-5-8 20:52
回复 2# Batcher
谢谢版主大佬
作者: Batcher 时间: 2022-5-8 20:57
回复 1# myh17909
请注意先做好原始文件夹或文件备份,再开始测试代码。
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA- @echo off
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- cd "001"
- set "n=1000"
- for /f "delims=" %%i in ('dir /b /ad') do (
- set /a n+=1
- ren "%%i" "语文-!n:~1!"
- )
- cd "..\002"
- set "n=1000"
- for /f "delims=" %%i in ('dir /b /ad') do (
- set /a n+=1
- ren "%%i" "数学-!n:~1!"
- )
- cd "..\003"
- set "n=1000"
- for /f "delims=" %%i in ('dir /b /ad') do (
- set /a n+=1
- ren "%%i" "英语-!n:~1!"
- )
- cd "..\004"
- set "n=1000"
- for /f "delims=" %%i in ('dir /b /ad') do (
- set /a n+=1
- ren "%%i" "科学-!n:~1!"
- )
复制代码
作者: myh17909 时间: 2022-5-8 21:35
回复 4# Batcher
谢谢版主大人,好人一生平安!
作者: qixiaobin0715 时间: 2022-5-9 10:17
- @echo off
- setlocal enabledelayedexpansion
- set var=语文 001 数学 002 英语 003 科学 004
- for %%i in (%var%) do (
- set /a n+=1
- set /a m=n%%2
- if !m! equ 0 set _%%i=!var1!
- set var1=%%i
- )
- for /d %%a in (00?) do (
- if defined _%%a (
- pushd %%a
- set n=1000
- for /f "delims=" %%b in ('dir /b /ad') do (
- set /a n+=1
- ren "%%b" "!_%%a!-!n:~1!"
- )
- popd
- )
- )
- pause
复制代码
作者: myh17909 时间: 2022-5-10 11:54
回复 6# qixiaobin0715
谢谢大佬,好人一生平安!
作者: myh17909 时间: 2022-5-10 11:57
回复 4# Batcher
麻烦问一下版主大佬,这里的格式“语文-001”,“语文-002”要是做成“语文 (1)”,“语文 (2)”这样的格式应该怎么改,麻烦您指导一下
作者: flashercs 时间: 2022-5-10 18:09
本帖最后由 flashercs 于 2022-5-11 11:51 编辑
回复 8# myh17909 - @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- set 001=语文
- set 002=数学
- set 003=英语
- set 004=科学
-
- for /d %%A in (*) do (
- if defined %%~nxA call :renexcept "%%~fA" "!%%~nxA!"
- )
-
- endlocal
- pause
- exit /b
-
- :renexcept
- setlocal enabledelayedexpansion
- pushd "%~1"|| goto :end
-
- set oldnames="%temp%\~%random%"
- set newnames="%temp%\~%random%"
- set oldexcept="%temp%\~%random%"
- set newexcept="%temp%\~%random%"
- set n=0
- >%oldnames% (
- for /f "delims=" %%A in ('dir /ad /b') do (
- echo %%~nxA
- set /a n+=1
- set "newlist[!n!]=%~2 (!n!)"
- )
- )
-
- >%newnames% (for /f "tokens=1* delims==" %%A in ('set newlist[') do echo %%B)
-
- >%oldexcept% findstr /ilxvg:%newnames% %oldnames%
- >%newexcept% findstr /ilxvg:%oldnames% %newnames%
- @REM findstr is BUGey
- <%newexcept% (
- for /f "usebackq delims=" %%A in (%oldexcept%) do (
- set /p newname=
- if defined newname (
- echo ren "%%A" "!newname!"
- ren "%%A" "!newname!"
- )
- )
- )
- del %oldnames% %newnames% %oldexcept% %newexcept%
- popd
- :end
- endlocal
- exit /b
复制代码
作者: myh17909 时间: 2022-5-11 11:49
回复 4# Batcher
麻烦问一下版主大佬,这里的格式“语文-001”,“语文-002”要是做成“语文 (1)”,“语文 (2)”这样的格式应该怎么改,麻烦您指导一下
作者: flashercs 时间: 2022-5-11 11:52
回复 10# myh17909
楼上代码已修改, 是有问题吗?
作者: myh17909 时间: 2022-5-11 11:57
回复 11# flashercs
谢谢大神,好人一生平安!
作者: myh17909 时间: 2022-5-11 19:45
本帖最后由 myh17909 于 2022-5-11 19:50 编辑
回复 11# flashercs
您好大神,按照您的代码运行了一下,现在的问题是重命名不是按顺序依次来的,有点乱序,如何解决?
图片链接:https://imgtu.com/i/OdYZm6
作者: flashercs 时间: 2022-5-11 21:33
回复 13# myh17909
按资源管理器排序是个问题,与批处理排序规则不同,很麻烦的... 尤其是你这种要求,按序号排序.- <#*,:&cls
- @echo off
- REM 这里是指目录下所有文件全部重命名.新文件名与旧文件名是一一对应的,顺序不能改变.
- REM 旧文件名集合是按照for列出的顺序.新文件名集合是自定义数组.
- REM 此法重命名次数最多
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- set 001=语文
- set 002=数学
- set 003=英语
- set 004=科学
- for /d %%A in (*) do (
- if defined %%~nxA call :rentemp "%%~fA" "!%%~nxA!"
- )
-
- endlocal
- pause
- exit /b
-
- :rentemp
- setlocal enabledelayedexpansion
- pushd "%~1"|| goto end
- set n=0
- @REM 按Explorer排序规则排序
- 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 (
- REM 必须一一对应,如果新文件名已存在,则必须重命名为临时文件名,并保存到临时列表,数据格式:oldname/tempname/targetname
- set /a n+=1
- set "newname=%~2 (!n!)"
- if not "!newname!"=="%%A" (
- if exist "!newname!" (
- call :getTempName
- @REM echo ren "%%A" "!tempname!"
- >nul 2>nul ren "%%A" "!tempname!" && set "templist[!n!]=%%A/!tempname!/!newname!"
- ) else (
- echo ren "%%A" "!newname!"
- ren "%%A" "!newname!"
- )
- )
- )
- REM 重命名临时列表
- for /f "tokens=1* delims==" %%A in ('2^>nul set templist[') do (
- for /f "tokens=1-3 delims=/" %%C in ("%%B") do (
- echo ren "%%C" "%%E"
- ren "%%D" "%%E"
- )
- )
- popd
- :end
- endlocal
- exit /b
-
- :getTempName
- :loop
- set tempname=~%random%~
- if exist "%tempname%" goto loop
- @REM echo tempname=%tempname%
- exit /b
- #>
- param([psobject]$InputObject)
-
- Add-Type -TypeDefinition @'
- using System;
- using System.Collections.Generic;
- using System.Runtime.InteropServices;
-
- namespace MyCode
- {
- public class ExplorerViewComparer : Comparer<string>
- {
- [DllImport("Shlwapi.dll", EntryPoint = "StrCmpLogical", CharSet = CharSet.Auto)]
- internal static extern int StrCmpLogical(string p1, string p2);
-
- public override int Compare(string x, string y)
- {
- return StrCmpLogical(x, y);
- }
- }
- }
- '@
- # create comparer object
- $ExpComp = New-Object MyCode.ExplorerViewComparer
- $arrstr = [string[]]@($InputObject)
- [Array]::Sort($arrstr, $ExpComp)
- $arrstr
- trap {continue}
复制代码
作者: Batcher 时间: 2022-5-11 23:28
回复 8# myh17909
请注意先做好原始文件夹或文件备份,再开始测试代码。
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA- @echo off
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- cd "001"
- set "n=0"
- for /f "delims=" %%i in ('dir /b /ad') do (
- set /a n+=1
- ren "%%i" "语文 (!n!)"
- )
- cd "..\002"
- set "n=0"
- for /f "delims=" %%i in ('dir /b /ad') do (
- set /a n+=1
- ren "%%i" "数学 (!n!)"
- )
- cd "..\003"
- set "n=0"
- for /f "delims=" %%i in ('dir /b /ad') do (
- set /a n+=1
- ren "%%i" "英语 (!n!)"
- )
- cd "..\004"
- set "n=0"
- for /f "delims=" %%i in ('dir /b /ad') do (
- set /a n+=1
- ren "%%i" "科学 (!n!)"
- )
复制代码
作者: myh17909 时间: 2022-5-12 21:00
回复 15# Batcher
版主大神威武!!感激不尽!
作者: myh17909 时间: 2022-5-12 21:01
回复 14# flashercs
感谢大神辛苦付出,但是代码还是不太好用,版主已经给出了解决方案,谢谢了!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |