在 Windows 中複製具有完整相對路徑的文件

在 Windows 中複製具有完整相對路徑的文件

我有大量文件(45,000+),資料夾結構相當複雜。我提取了約 13,000 個檔案的子集及其路徑(相對於根資料夾),我想將其與原始資料夾路徑一起複製。

儘管我進行了徹底的搜索,但我找不到一種方法,使用 xcopy 或 robocopy 來完成我想要的操作。我可以輕鬆地為清單中的每個條目建立一個批次文件,並使用複製命令。但是,我找不到任何 x/robocopy 開關或開關組合來從我的來源檔案產生目標中的資料夾路徑,例如:

xcopy dir1\dir2\dir3\file.txt copy_folder /<some switches>

或者

xcopy dir1\dir2\dir3\file.txt copy_folder\dir1\dir2\dir3\file.txt /<some switches>

dir1\dir2\dir3如果該資料夾下不存在該路徑,我希望它會建立該路徑copy_folder並在其中放置副本file.txt。據我了解,在 Linux 上cp --parent正是這樣做的。

任何關於實現這一目標的最佳方法的建議都是非常受歡迎的!

答案1

如果資料夾不存在,XCOPY 將建立這些資料夾,但它首先提示詢問目標是檔案還是目錄。

因此,您可以透過管道將 F 回應傳遞給 XCOPY 命令,以便該命令不會暫停。

for /f "delims=" %%F in (yourList.txt) do echo f 2>nul | xcopy /y "%%~F" "copyFolder\%%~F"

如果清單中有重複項,則使用該/Y選項 - 您不希望 XCOPY 命令提示詢問是否要覆寫。

如果路徑確實存在,則需要將 stderr 重定向到 nul,在這種情況下,右側可能會在左側之前完成,導致左側將以下錯誤訊息列印到 stderr -The process tried to write to a nonexistent pipe.重定向隱藏了不需要的錯誤訊息。

另一種選擇是在執行 XCOPY 之前先建立目標路徑。只需將 stderr 重定向到 null 即可避免在路徑已存在時看到錯誤訊息。

for /f "delims=" %%F in (yourList.txt) do (
  md "copyFolder%%~pF" 2>nul
  xcopy /y "%%~F" "copyFolder\%%~F"
)


"copyFolder%%~pnxF"無論使用哪種解決方案,如果清單中的路徑包含磁碟機號,那麼您將需要使用"copyFolder\%%~F".請注意,~p修飾符包括前導\.

相關內容