2014-12-30 31 views
1

我正在批量編寫一些(難看的)代碼來重新排列文件夾之間的文件。如何移動文件夾,如果他們包含某個文件?

我創建了一個代碼的一部分,將具有相似文件名的一種類型的文件移動到同一文件夾,並創建一個名爲「serie.txt」的虛擬文本文件,如果文件不止一個文件。

最後,我有一個名爲「E:\ videos \ catalogar \」的文件夾,裏面有很多子文件夾,其中一些文件夾包含文件「series.txt」。我需要將這些文件夾移動到路徑「E:\視頻\系列\」,而且,對於這一點,我寫了這個:

for /r "e:\videos\catalogar\" %%F in (serie.txt) do (
    set directorio=%%~dpF 
    if not "!directorio!"=="e:\videos\catalogar\" (
    del "!directorio!*.txt" 
    move /y "!directorio!." "e:\videos\series\" 
    ) 
) 

delayedexpansion被打開。 if條件是爲了避免移動整個根文件夾。

問題是,出於某種原因,此代碼在「E:\ videos \ catalogar \」內移動全部子文件夾,而不僅僅是包含「serie.txt」的子文件夾。怎麼了?

回答

1
for /r "e:\videos\catalogar\" %%F in (serie.txt) do (

執行目錄掃描,但並沒有使用的文件匹配。如果文件掩碼包含*?,它將只使用文件掩碼。就個人而言,我認爲這是一個錯誤(OK如果文件匹配是'.'但應該匹配面罩,不管其他方式),也許要求微軟修復它爲W10 here may work.

所以 - 也許添加門的建議,或包括*?在文件掩碼強制「只有目錄匹配」將解決您的問題。

無論哪種方式,在爲directorio分配值時沒有什麼意義,因爲%%~dpF在發佈的sniplet中的效果完全相同。

+0

謝謝你,夥計,這對我有用!我使用了「seri?.txt」掩碼,並刪除了if條件。 – JohnnyBra

0

for /r遍歷目錄樹,並且您不在子文件夾中測試是否存在serie.txt,因此腳本正在嘗試每個文件夾和除根目錄以外的每個文件夾。

像這樣的腳本會嘗試在這些文件夾的子文件夾和測試假人文件中的一個級別:

for /d %f in ("e:\videos\catalogar\*") do (
    if exist "%%f\serie.txt" (
     move ... 
相關問題