該解決方案比您當前的代碼簡單得多。 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"
根據您的'@path \ .. \'注意,我只是測試'CD 「C:\ Windows \ System32下」 \ .. \',它的返回'C:\ Windows'目錄。這是一個了不起的竅門。 –
我已經做到了這一點,它的工作。但是我有最後一個問題,我需要捕獲路徑或將路徑存儲到變量。我需要存儲@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
不,您不需要將路徑放入變量中。只需在FORFILES命令中調用你的「something.exe」即可。這聽起來像你想做的,而不是MOVE。 – dbenham