我正在寻找一种解决方案,将多个文件从不同的文件夹复制到一个文件夹。
我需要从
c:\客户\文件夹A\文件夹B\文件
复制到 e:\FolderB\files
问题是“客户”每次都不同。FolderA 也不同。只有 FolderB 相同。
我尝试过使用 robocopy 或 copy。但我总是必须填写客户姓名。
有人能帮我吗?
所以我尝试将它放入 powershell 中
我来到
复制项目-路径 C:\customer-Recurse-filter *.xls-目标 e:\folderB-Force
只有这样我才能过滤文件和所有已复制的文件夹。我只想要其中的文件。
答案1
您可以使用致/D命令循环遍历目录在路径中:
FOR /D %%I IN (C:\Customers\*) DO (
REM %%I is "C:\Customers\FolderA", etc.
robocopy.exe /E "%%I\FolderB\files" "C:\FolderB\files"
)
假设目录C:\客户包含:
- A. Datum 公司
- AdventureWorks Cycles
- 高山滑雪屋
- 超棒的電腦
- 鲍德温科学博物馆
- 蓝色彼岸航空
如果我们运行这个简单的命令脚本:
FOR /D %%I IN (C:\Customers\*) DO (
ECHO %%I
)
我们得到这个输出:
C:\Customers\A. Datum Corporation
C:\Customers\AdventureWorks Cycles
C:\Customers\Alpine Ski House
C:\Customers\Awesome Computers
C:\Customers\Baldwin Museum of Science
C:\Customers\Blue Yonder Airlines
更进一步来说,这个命令脚本:
FOR /D %%I IN (C:\Customers\*) DO (
robocopy.exe /E "%%I\FolderB\files" "C:\FolderB\files"
)
将按顺序运行以下命令:
robocopy.exe /E "C:\Customers\A. Datum Corporation" "C:\FolderB\files"
robocopy.exe /E "C:\Customers\AdventureWorks Cycles" "C:\FolderB\files"
robocopy.exe /E "C:\Customers\Alpine Ski House" "C:\FolderB\files"
robocopy.exe /E "C:\Customers\Awesome Computers" "C:\FolderB\files"
robocopy.exe /E "C:\Customers\Baldwin Museum of Science" "C:\FolderB\files"
robocopy.exe /E "C:\Customers\Blue Yonder Airlines" "C:\FolderB\files"
当然,输出将是每个 robocopy 命令的结果。
答案2
在 PowerShell 中,您还可以使用 foreach
$SourceFolders = "C:\SourceFolder1\", "C:\SourceFolder2\", "C:\SourceFolder3\" # Add your source folders here
$DestinationFolder = "C:\DestinationFolder\" # Specify your destination folder
foreach ($SourceFolder in $SourceFolders) {
Get-ChildItem -Path $SourceFolder -File -Recurse | ForEach-Object {
$DestinationPath = Join-Path -Path $DestinationFolder -ChildPath $_.FullName.Substring($SourceFolder.Length)
Copy-Item -Path $_.FullName -Destination $DestinationPath -Force
}
}
答案3
在 Windows 11 上,此命令刚刚对我有用。它允许我将多个子文件夹中的所有照片和视频复制到一个完全不同的文件夹中:
cd /d "E:__我的视频和摄影__我的视频和摄影" for /r %%d in (*) do (copy "%%d" "E:\Temp_2\PhotosAndVIdeosFrom30years")
(使用上面的解决方案,但为未来的读者进行了简化)