缺少通配符讓此批次搜尋所有子資料夾嗎?

缺少通配符讓此批次搜尋所有子資料夾嗎?

我一直在從網路上提取腳本片段,建立一些東西來搜尋一個父資料夾下的所有資料夾,尋找某些檔案並將它們複製到新位置。 (我們有一個目錄,其中有無數的空資料夾和已佔用資料夾,並且正在嘗試在不手動搜尋的情況下找到少量檔案)

到目前為止,該腳本可以工作,但前提是命名檔案(來自 Names.txt 文件)直接位於父資料夾 (...\source) 下。如果它們位於父資料夾 (...\source\folder1\folder2\etc) 內的任何資料夾內,則不會搜尋它們,也不會出現任何結果。我缺什麼?

@echo off
pushd C:\Users\username\Desktop\TestBatches
set /p SourceFolder=Enter the path of source folder and press 'Enter':
cls
for /f "tokens=* delims=" %%a in ('type Names.txt') do xcopy /hrkvy "%SourceFolder%\%%a" ".\destination"
popd
pause

輸入來源路徑時,是否在命令提示字元中新增通配符?或者,我是否可以在批次中添加一些內容來自動執行此操作?

我有點失落。感謝您的幫忙!

答案1

我將在這裡直接帶您了解一些高級批次概念。
在下面的範例中,我使用批次處理功能來完成這個任務。這不是實現目標的最有效方法,但它會向您展示您可以做的事情做。我仍然很累,所以這個解決方案可能是一個愚蠢的解決方案(但它有效)

就算不走這條路,或許”dir /s /b 檔案掩碼「就是你要找的。

@echo off
:: This assumes that this batch is in the same folder as Names.txt and the .\destination folder
:: This batch DOES NOT check things it should like the existence of %SourceFolder% or if .\destination even exists
Set ThisDir=%~DP0
Set DestinationDir=%ThisDir%\destination
Set NamesFile=%ThisDir%\Names.txt
Set /p SourceFolder=Enter the path of source folder and press [Enter]:
for /f "delims=" %%a in ('type %NamesFile%') do call :SearchName "%%a"
pause
goto :EOF

:: ----------------------------------------------------------------
:SearchName
pushd %SourceFolder%
for /f "delims=" %%f in ('dir /s /b %1') do call :FoundFile "%%f"
popd
goto :EOF

:: ----------------------------------------------------------------
:FoundFile
xcopy /hrkvy "%1" "%DestinationDir%"
goto :EOF

第一個 for 迴圈除了呼叫函數之外什麼也不做:搜尋名稱對於文字檔案中的每個名稱。

:搜尋名稱函數切換到「Set /p」指定的目錄並執行「dir /s /b NAME_PASSED_FROM_TEXT_FILE」。它將獲得的行(找到的文件)泵送到:找到文件功能。

:找到文件函數複製傳遞給它的檔案。

相關內容