2015-01-08 75 views
1
FORFILES /p E:\test_folderpath\ /D -2 /S /C "cmd /c echo @isdir @path "|findstr "FALSE"|findstr /v "E:\test_folderpath\testtest\log" 

此代碼顯示所有具有FALSE字符串的文件,即使它們的擴展名不同。他們來自不同的目錄,並且他們的所有目錄都有一個SC文件夾(成功)。使用目錄播放的批處理文件腳本

例如,如果我回應在命令行上此路徑/文件輸出:

FALSE「C:\測試\測試\測試\ waedsa.tmp」

我想要做什麼是獲取所有這些FALSE文件並將它們移動到各自目錄中的SC文件夾中。

回答

1

該解決方案比您當前的代碼簡單得多。 FINDSTR或管道不需要。我使用find和replace來測試@path是否包含排除的文件。我還假裝該文件實際上是一個目錄,因此@path\..\引用該文件的父目錄。這並不明顯,但這是有效的!

請注意,這將嘗試移動已在SC文件夾中的文件,但這會失敗(一件好事),因爲SC文件夾沒有自己的SC文件夾。我將stderr重定向到NUL,以便隱藏期望的錯誤消息。

forfiles /p E:\test_folderpath\ /d -2 /s /c "cmd /v:on /c set "[email protected]"&if @isdir==FALSE if !file:E:\test_folderpath\testtest\log=! neq !file! move /y @path @path\..\sc >nul 2>nul" 


或者你可以使用FIND(或FINDSTR)排除不需要的文件:

forfiles /p E:\test_folderpath\ /d -2 /s /c "cmd /c if @isdir==FALSE echo @path|find /i "E:\test_folderpath\testtest\log" >nul || move /y @path @path\..\sc >nul 2>nul" 


如果你知道文件的確切名稱排除(稱之爲log.txt的這個例如),那麼它就更簡單了:

forfiles /p E:\test_folderpath\ /d -2 /s /c "cmd /c if @isdir==FALSE if /i @path neq "E:\test_folderpath\testtest\log.txt" move /y @path @path\..\sc >nul 2>nul" 
+0

根據您的'@path \ .. \'注意,我只是測試'CD 「C:\ Windows \ System32下」 \ .. \',它的返回'C:\ Windows'目錄。這是一個了不起的竅門。 –

+0

我已經做到了這一點,它的工作。但是我有最後一個問題,我需要捕獲路徑或將路徑存儲到變量。我需要存儲@path \ .. \ sc。因爲在我將文件移出到SC之前。我需要通過something.exe來傳遞文件。而something.exe會處理這個文件,它會爲SC創建一個成功的文件。 some.exe的參數是,啓動「」something.exe「E:\ test_folderpath \ test」(其中文件來自)「E:\ test_folderpath \ SC」(文件將發送到哪裏)「E:\ test_folderpath \ test「(原始目錄)。所以我需要存儲\ .. \ sc – Christiane

+0

不,您不需要將路徑放入變量中。只需在FORFILES命令中調用你的「something.exe」即可。這聽起來像你想做的,而不是MOVE。 – dbenham

相關問題