我的Windows机器上有一堆音乐,由艺术家和专辑按文件夹组织。我希望将主目录下所有文件夹和子文件夹中的所有mp3递归复制到一个位置。
可以使用Windows命令行完成吗?
答案 0 :(得分:0)
让我们说我们有以下结构
我们希望将所有这些文件复制到
中的单个目录中在c:\ temp \中创建一个bat文件,例如copyallmp3.bat并编写以下代码
for /R "C:\temp" %%i in (*.mp3) do xcopy "%%i" "C:\temp\all" /y
运行copyallmp3.bat。 如果您导航到c:\ temp \ all,您将看到所有4个mp3文件。
如果您希望最终结果类似于(递归)
在powershell中使用以下代码
$Source = 'C:\temp'
$Files = '*.mp3'
$Dest = 'C:\temp\all'
Get-ChildItem $Source -Filter $Files -Recurse | ForEach{
$Path = ($_.DirectoryName + "\") -Replace [Regex]::Escape($Source), $Dest
If(!(Test-Path $Path)){New-Item -ItemType Directory -Path $Path -Force | Out-Null
Copy-Item $_.FullName -Destination $Path -Force
}}
答案 1 :(得分:0)
您的代码启发了我完成类似的任务。我移动目录,文件包含一个指向我的新目的地的文件格式列表。然后我删除空文件夹。
$Source = 'D:\Téléchargements'
$Dest = 'D:\Musique'
# List of file format
$File = '*.mp3', '*.flac'
Get-ChildItem "$Source\*" -Include $File -Recurse –force -ErrorAction SilentlyContinue | ForEach{
$FilePath = $_.DirectoryName
# File directly in source dir
If ($FilePath -eq $Source) { Move-Item $_.FullName -Destination $Dest -Force }
Else {
$DestPath = ("$FilePath\") -Replace [Regex]::Escape($Source), $Dest
If ( !(Test-Path $DestPath) ) { New-Item -ItemType Directory -Path $DestPath -Force | Out-Null }
Move-Item $_.FullName -Destination $DestPath -Force
# Delete empty dir
If ((Get-ChildItem $FilePath).count -eq 0) { Remove-Item $FilePath -Force}
}
}
答案 2 :(得分:0)
在Windows控制台中,命令是
xcopy "*".mp3 $from $to
$ from 应该是目标源的路径
$ to 应该是您来源的新路径
答案 3 :(得分:0)
假设目录的结构为artist/album/*.mp3
:
为复制的文件创建目录
mkdir new
转到您的音乐目录
cd g:/music
在您的.mp3
后面加上三个*
分隔的通配符\
:
cp "*/*/*.mp3" "g:/new"