标题: [文本处理] 批处理多类型文件重命名的问题 [打印本页]
作者: duoduo200 时间: 2022-4-29 17:36 标题: 批处理多类型文件重命名的问题
[img][/img]
[img][/img]
各位大佬!
描述:在用everthing搜索文件的时候(如图一)基本都是序号+歌曲名。 所以想自动修改文件的命名。
同样如图二为例,我目前文件夹的架构是: Z(祖文件夹)→歌手名字(父文件夹)→专辑名字(子文件夹)→音频文件+文本图片(孙文件夹)。
同时文件分为三大类 :音频文件格式包括、WAV、flac、dts、dff、mp3)、文本文件(txt、pdf、word)、图片文件(jpg、png、jpeg);
需求:1、不删除原本音频文件的歌曲名字,音频文件可以自动命名为歌手+歌曲名。(注意,可以调用父文件夹来命名),如:01.张洪量-相思三态
2、文本图片文件夹(孙文件夹)原有文件名字全部删除(无论图片还是文本),重命名为歌手名字+专辑名字。(注意,可以调用父文件夹名和子文件夹名),如:张洪量-1992-有种[滚石首版]
描述不清之处请见谅,感谢各位大佬!
作者: flashercs 时间: 2022-4-29 18:49
- @echo off
- if not exist "%~dp1" exit /b
- cd /d "%~dp1" 2>nul
- for %%A in ("%~f1\..") do (
- set zhuanji=%%~nxA
- for %%B in ("%%~fA\..") do (
- set geshou=%%~nxB
- )
- )
- @REM echo %zhuanji%
- @REM echo %geshou%
- @REM 重命名音频
- for %%A in (*.wav *.flac *.dts *.dff *.mp3) do (
- for /f "tokens=1* delims=." %%B in ("%%~nxA") do (
- ren "%%A" "%%B.%geshou%-%%C"
- )
- )
- @REM 删除文本图片
- for /d %%A in (.\*) do (
- pushd "%%A\"
- del /q /f *.txt *.pdf *.doc *.jpg *.jpeg *.png
- popd
- ren "%%A" "%geshou%-%zhuanji%"
- goto break
- )
- :break
- pause
- exit /b
复制代码
作者: zaqmlp 时间: 2022-4-29 19:42
- @echo off&(if "%~1" equ "" goto :end)
- if not exist "%~dp1" (echo;Path Error&goto :end) else (cd /d "%~dp1")
- for /f "delims=" %%a in ("%~dp1.") do set "fd1=%%~nxa"
- for /f "delims=" %%a in ("%~dp1..") do set "fd2=%%~nxa"
- for /f "delims=" %%a in ('dir /a-d-h/b *.wav *.flac *.dts *.dff *.mp3 2^>nul') do (
- for /f "tokens=1* delims=." %%b in ("%%~na") do (
- if "%%b" neq "" (
- if "%%c" neq "" (
- echo;"%~dp1%%~nxa" --^> "%%b.%fd2%-%%c%%~xa"
- ren "%~dp1%%~nxa" "%%b.%fd2%-%%c%%~xa"
- ) else (
- echo;"%~dp1%%~nxa" --^> "%fd2%-%%~nxa"
- ren "%~dp1%%~nxa" "%fd2%-%%~nxa"
- )
- )
- )
- )
- for /d %%a in (*) do (
- pushd "%%a"
- for /f "delims=" %%b in ('dir /a-d-h/b *.txt *.pdf *.doc *.jpg *.jpeg *.png 2^>nul') do (
- echo;"%~dp1%%~nxa%%~nxb" --^> "%fd2%-%fd1%%%~xb"
- ren "%~dp1%%~nxa\%%~nxb" "%fd2%-%fd1%%%~xb"
- )
- popd
- )
- :end
- pause
- exit
复制代码
作者: duoduo200 时间: 2022-4-29 19:45
本帖最后由 duoduo200 于 2022-4-29 20:11 编辑
回复 2# flashercs
感谢大佬的回复。
可能我描述的不够清楚,或者需求太复杂。整体测试下来,出现了以下三种随机的情况:
[img][/img]
把祖文件夹的名字调用命名了,但命名变成在最后面了,但我想要达到的应该是 01.王珊珊-别让我一个人醉 这样的格式。(注,我的文件夹架构是 W文件夹--王珊珊文件夹--专辑名或者直接是文件--文件)
另外,就是不一定会有祖、父、子、孙的文件夹,比如上图就是文件直接在父文件夹里了,您的代码直接调用上级文件夹命名了。
所以,针对这个情况,是否能加个判断,如果掉用的文件夹名字是 大写字母的祖文件夹,就调用父文件夹的名字。这样是否能规避,文件也许在父文件夹或者子文件夹里的问题。或者您有其他建议更好。
[img][/img]
这张是运行bat后,出现了只命名了子文件夹的文字(正常是不命名的),子文件夹下的文件没有被命名。
[img][/img]
这张是运行后,只出现了序列号,其他没有变化,包括孙文件夹《专辑图片与介绍》里的文件,也没有变化。
辛苦您再帮忙看看。
作者: duoduo200 时间: 2022-4-29 20:10
回复 3# zaqmlp
感谢大佬!
但有几个问题,还得麻烦您看一下。
[img][/img]
上面原文件夹和文件情况,下面是运行bat后命名的情况。
是否可以解决这个重复命名?
[img][/img]
[img][/img]
上面是原文件,下面是bat结果,这个正常了,但没有编号了。
另外,目前文件夹的架构是: 大写字母(祖文件夹)→歌手名字(父文件夹)→专辑名字(子文件夹)→音频文件+文本图片(孙文件夹)
也经过另一个大佬的代码,发现我自身文件夹里有个情况,就是文件有的是在父文件下,也有的是在子文件夹里。
所以是否可以加个判断,,如果调用的文件夹名字是 大写字母的祖文件夹,就调用父文件夹的名字。
不知道我阐述的是否清楚。请见谅。
作者: zaqmlp 时间: 2022-4-29 20:22
实际文件和文件夹都有什么情况,整理清楚在发出来,或者加我微信
作者: flashercs 时间: 2022-4-30 01:10
回复 4# duoduo200 - @echo off
- if not exist "%~dp1" exit /b
- cd /d "%~dp1" 2>nul
- for %%A in ("%~f1\..") do (
- set zhuanji=%%~nxA
- for %%B in ("%%~fA\..") do (
- set geshou=%%~nxB
- )
- )
- echo."%geshou%"|findstr /ric:"^\"[a-z]\"$" >nul && ( set "geshou=%zhuanji%" & set "zhuanji=")
- @REM echo zhuanji=%zhuanji%
- @REM echo geshou=%geshou%
- @REM 重命名音频
- for /f "tokens=1-2 delims=|" %%A in ('dir /a-d /b *.wav *.flac *.dts *.dff *.mp3^|powershell -c "begin{$ctr=0}process{$s=$($input);$s+'|'+(++$ctr).ToString().PadLeft(3,'0')+'.%geshou%-'+($s -replace ('^\d+\.('+[regex]::Escape('%geshou%-')+')*'),'')}"') do (
- ren "%%A" "%%B"
- )
- @REM 重命名文本图片
- for /d %%A in (.\*) do (
- pushd "%%A\"
- for %%B in (*.txt *.pdf *.doc *.jpg *.jpeg *.png) do (
- if defined zhuanji (
- ren "%%B" "%geshou%-%zhuanji%%%~xB"
- ) else (
- ren "%%B" "%geshou%%%~xB"
- )
- )
- popd
- )
- :break
- pause
- exit /b
复制代码
作者: duoduo200 时间: 2022-5-6 14:12
本帖最后由 duoduo200 于 2022-5-6 18:44 编辑
回复 7# flashercs
感谢大佬!是我想要的效果。请您喝杯咖啡,已经打进您的支付宝里。
另外,有个小问题,麻烦您帮忙修改一下。专辑团片与介绍里有个别的.txt没有命名,我猜是因为都是txt和原名字相同的问题。由于所有该类文件夹的图片、文档数量有多有少,能否帮忙修改为全部都重命名,并添加序号(避免同名文件无法全部命名的问题)
参考格式 文档类:txt\pdf\word\ppt、 图片:jpg 、jpeg、gif、png、
另外,是否可以加个判断,就是在重命名时候,如果音频和图片文件现有的文件名和上两层文件夹里的 字和名字 重复就不用重命名了,不知道是否可以?
谢谢
作者: flashercs 时间: 2022-5-7 02:29
本帖最后由 flashercs 于 2022-5-7 14:13 编辑
回复 8# duoduo200 - @echo off
- if not exist "%~dp1" exit /b
- cd /d "%~dp1" 2>nul
- for %%A in ("%~f1\..") do (
- set zhuanji=%%~nxA
- for %%B in ("%%~fA\..") do (
- set geshou=%%~nxB
- )
- )
- echo."%geshou%"|findstr /ric:"^\"[a-z]\"$" >nul && ( set "geshou=%zhuanji%" & set "zhuanji=")
- @REM echo zhuanji="%zhuanji%"
- @REM echo geshou="%geshou%"
- @REM 重命名音频
- @REM for %%G in ("%geshou%") do (
- @REM for %%Z in ("%zhuanji%") do (
- @REM )
- @REM )
- for /f "tokens=1-2 delims=|" %%A in ('dir /a-d /b *.wav *.flac *.dts *.dff *.mp3^|2^>nul powershell -c "begin{$ctr=0;$g=$env:geshou;$z=$env:zhuanji}process{$s=$($input);$bn=[system.io.path]::GetFileNameWithoutExtension($s);if($bn -eq $g -or $bn -eq $z){return}$s+'|'+(++$ctr).ToString().PadLeft(3,'0')+\".$g-\"+($s -replace ('^(\d+\.)?('+[regex]::Escape(\"$g\")+'\s*-\s*)*'),'')}"') do (
- ren "%%A" "%%B"
- )
- @REM 重命名文本图片
- for /d %%A in (.\*) do (
- pushd "%%A\"
- for /f "delims=" %%B in ('dir /a-d /b *.txt *.pdf *.doc *.ppt *.jpg *.jpeg *.png *.gif') do (
- if defined zhuanji (
- call :myren "%%~nxB" "%geshou%" "%zhuanji%"
- ) else (
- call :myren "%%~nxB" "%geshou%"
- )
- )
- popd
- )
-
- pause
- exit /b
-
- :myren srcname geshou zhuanji
- setlocal
- @REM 忽略文件名basename与歌手或专辑目录名相同的文件
- if /i "%~n1"=="%~2" goto end
- if /i "%~n1"=="%~3" goto end
- if "%~3"=="" (
- set "basename=%~2"
- ) else (
- set "basename=%~2-%~3"
- )
- set "newname=%basename%%~x1"
- set n=1000
- :loop
- if /i "%newname%"=="%~1" goto end
- if not exist "%newname%" (
- ren "%~1" "%newname%"
- goto end
- )
- set /a n+=1
- set "newname=%basename%_%n:~-3%%~x1"
- goto loop
- :end
- endlocal
- exit /b
复制代码
作者: duoduo200 时间: 2022-5-7 08:51
回复 9# flashercs
[img][/img]
大佬,最新的代码会有以上图片里的情况。
原有文件是 陈雷-丑丑啊思相枝 ,运行bat后变成了图片里的情况。我猜是不是 C--陈雷--音频文件,这样的架构有关。因为有的是 C---陈雷--专辑名称文件夹---音频文件 这样的架构。代码无法自动识别到底是几层架构。
所以是否能自动识别几层架构 或者 识别到音频文件有歌手名字和文件夹名字重复 就不再添加重复字样了。
作者: flashercs 时间: 2022-5-7 14:25
回复 10# duoduo200
9楼 已修改
作者: duoduo200 时间: 2022-5-7 14:32
回复 11# flashercs
感谢大佬的帮助
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |