我有一个名为 的主目录KARAOKI
,其中有艺术家的文件夹,这些文件夹中包含他们的所有歌曲。我需要在该文件夹中的每首歌曲前面插入文件夹名称,以便将其加载到卡拉 OK 主文件中
例如,以下文件名需要如下所示 Elvis Presley - Are You Lonesome Tonight
::
- 文件夹名称:
Elvis Presley
标题名称:Are You Lonesome Tonight
答案1
答案2
@echo off && setlocal enabledelayedexpansion
cd /d "%~dp0" && for /f tokens^=* %%i in ('dir /s /b /a:d')do for /f tokens^=* %%I in ('
dir /a:-d /b "%%~i"')do if not "%%~nxI" == "%~nx0" ren "%%~dpni\%%~nxI" "%%~ni - %%~nxI"
endlocal & goto :EOF
1)尝试使用delayed expansion
对于您的变量:
setlocal enabledelayedexpansion
2)转到 bat(我认为)将运行/工作的文件夹 == 主驱动器:\Master-Folder:
cd /d "%~dp0"
3)用一个for
循环仅在所有子文件夹中递归运行,文件夹 ==%%~i
:
for /f tokens^=* %%i in ('dir /s /b /a:d')do...
4)使用第二个for
在当前文件夹中(%%~i
) 获取/列出任何文件(%%~I
) 在当前文件夹中:
for /f tokens^=* %%i in ('dir /s /b /a:d')do for /f tokens^=* %%I in ('
dir /a:-d /b "%%~i"')do...
5)使用扩展变量%%~nxi
, %%~ni
,%~nx0
, %%~dpni\%%~nxI
和%%~xi
,根据布局名称需要:
%~nx0 == Name + Extension file.bat %0 == Q1537358.cmd
%%~ni == Name Folder in loop %%i == Are You Lonesome Tonight.ext
%%~nxI == Name + Extension file in loop %%I == Elvis Presley
%%~dpni == Drive + Path Name file in loop %%i == D:\KARAOKI
%%~nxI == Name Folder in loop %%I == KARAOKI
6)使用if
在尝试重命名任何文件之前,先比较当前的名称\扩展名文件是否与当前的 bat/cmd 文件相同:
if not "%%~nxI" == "%~nx0"
7)使用if
在尝试重命名任何文件之前,先比较当前的名称\扩展名文件是否与当前的 bat/cmd 文件相同:
8)在循环变量扩展中用此布局名称重命名您的文件:
ren "%%~dpni\%%~nxI" "%%~ni - %%~nxI"
ren "D:\KARAOKI\Elvis Presley\Are You Lonesome Tonight.ext" "Elvis Presley - Are You Lonesome Tonight.ext"
观察:假设您将保存此 bat 文件并在同一个Drive:\Folder
您的主目录\KARAOKI
是/是...
C:\KARAOKI or D:\KARAOKI or E:\KARAOKI...
对于命令行帮助,您可以使用/?
:
Ren /?, For /?,CD /?, Setlocal /?, Endlocal /?, Goto /?, Setlocal /?, Endlocal /?, if /?
在互联网上,您可以获得更多有关以下方面的帮助:
很抱歉我的英语水平有限
答案3
对于简单的重命名(如果它仅取决于文件的名称,也许还有一些数字/字母序列),我使用一款简单但很好用的免费软件“Lupas Rename 2000”。由于这还需要导航到父文件夹才能获取名称,所以我不确定它是否适用于您的情况。无论如何,您可以在这里找到它:http://rename.lupasfreeware.org/download.php
对于您的问题,我猜您需要更复杂的工具。如果您可以使用 PowerShell,Keith Miller 的工具似乎非常简洁有效。