2013-04-28 110 views
0

所以我有一個主目錄的子目錄中的複雜內文件排序驗證碼:在整個目錄上執行操作時是否可以跳過子目錄?

@ECHO OFF 
SETLOCAL 

SET relroot=g:\Pictures\Uda 18 
(SET relroot=g:\Pictures\Uda 18) 
SET "relroot=g:\Pictures\Uda 18" 

SET "destdir=g:\Pictures\Uda 18\Sets" 

:again 
(SET artist=) 
SET /p artist="Artist? " 

IF NOT DEFINED artist GOTO :eof 

MD "%destdir%\%artist%" 2>nul 

FOR /f "delims=" %%i IN ( 
    ' dir /s /b /a-d "%relroot%\*%artist%*" ' 
    ) DO (
>>undo.txt ECHO %%i^|%destdir%\%artist%\%%~nxi 
MOVE "%%i" "%destdir%\%artist%\%%~nxi" >nul) 
) 

GOTO again 

它需要一個輸入,查找其中的目錄「宇田18」和一切,移動與所有文件將其名稱輸入到以「Uda 18/Sets」目錄下的輸入命名的文件夾中。然而,不小心的測試讓我從'Uda 18/Sets'中繪製文件,這些文件的名字意味着它們不能用批處理來重新組織。爲了避免這種情況,我需要從文件的取出位置中排除「Uda 18/Sets」,但我找不到方法。正如標題所要求的那樣;有可能跳過一個select子目錄,如果是這樣,怎麼辦?

回答

0

試試這個畫除了那些從「集」文件夾中的文件名:

dir /b /s /a-d "uda 18" | find /v /i "sets" 

...並與您的文件夾:

echo "%destdir%\%artist%" | find /v /i "sets" >nul && goto:createFolder || goto:eof 
+0

這沒有奏效;該文件夾已創建,但沒有文件被觸摸,然後窗口自行關閉。 – Ultra 2013-04-28 12:27:27

+0

這不會創建任何文件夾。它顯示「uda 18」子文件夾中的所有文件,「集合」中的文件除外。 – Endoro 2013-04-28 12:52:50

+0

不是這一部分,而是在批處理的其餘部分中,通常會製作的文件夾已生成但文件未處理。 – Ultra 2013-04-28 13:07:12

0

個人而言,我寧願創建目標-directory BESIDES源目錄,不在:

source:  g:\pictures\uda 18\xxx 
destination: g:\pictures\sorted\uda 18\xxx 

這樣你不僅可以避免那個pr你也將總是有一個清晰和一致的目錄結構

+0

我希望能夠在不改變我安排文件夾的方式下進行排序。 – Ultra 2013-04-28 12:24:11

0

我也將我的目標文件夾從待處理的文件夾分開。

將它移出並稍後移回是一個選項。

move "g:\Pictures\Uda 18\Sets" "g:\Pictures" 
do your other commands here 
move "g:\Pictures\Sets" "g:\Pictures\Uda 18" 
+0

我想這是一種可能性,但由於某些原因,我發現我的選擇傾向於保持文件夾結構,因爲它貫穿整個過程。 – Ultra 2013-04-28 12:25:52

+0

SETS文件夾是否有任何子文件夾?文件夾樹中的名稱集有沒有其他文件夾可用? – foxidrive 2013-04-28 13:13:06

0
FOR /f "delims=" %%i IN ( 
    ' dir /s /b /a-d "%relroot%\*%artist%*" ^|findstr /v /i /b /c:"%destdir%\\"' 
    ) DO (ECHO MOVE "%%i" "%destdir%\%artist%\%%~nxi") 

應列出MOVE,這不包括在開始任何目錄/b進行/v/i不區分大小寫/c:整個字符串包括空格...其中\逃脫\等於是排除「G:\圖片\宇田18 \ Sets「及其任何子目錄(其中完整文件名將開始g:\Pictures\Uda 18\Sets\"

只需刪除/v以選擇ONLY匹配文件i n "g:\Pictures\Uda 18\Sets"及其子目錄。

+0

這裏的問題是findstr.exe位於我的C:\驅動器中,並且正在組織的批處理+文件夾都在我的G:\驅動器上。我必須將它全部重定向到我的findstr.exe的位置,但這會導致批處理嘗試在那裏執行所有操作,而不是指定的目錄(並且在測試時)。將findstr.exe放在我的G:\驅動器上也沒有解決這種情況。 – Ultra 2013-04-28 12:30:26

+1

findstr.exe應該放在'c:\ windows \ system32'中,另一個版本放在'c:\ windows \ syswow64'中(如果你正在運行64位的話)。無論它在哪裏,你的PATH(分號分隔目錄列表)應包含該目錄。 'path'是Windows查找(按順序)查找不在當前目錄中的任何可執行文件的目錄列表。 'findstr'正在一個只存在於內存中的''file''('dir'命令的輸出)工作。 – Magoo 2013-04-28 12:47:19

相關問題