如果檔案夾中僅包含一個特定檔案,則需要一種洗掉檔案夾 (rd/rmdir) 的方法。如果有任何其他檔案或子檔案夾,請忽略它。嘗試使用盡可能少的代碼來做到這一點。目前,我正在這樣做......
If Exist "C:\Folder\SubFolder\filename.txt" Move /Y "C:\Folder\SubFolder\filename.txt" "%TEMP%"
If Not Exist "C:\Folder\SubFolder\*" RD "C:\Folder\SubFolder" /Q /S
但是,即使該檔案夾不包含任何檔案,也永遠不會洗掉該檔案夾。
這可能在批處理檔案中嗎?提前謝謝。
uj5u.com熱心網友回復:
您可以使用find來計算目錄中的檔案數,然后findstr確定錯誤級別并簡單地使用條件運算子&&
也不需要檢查檔案是否存在,nul當找不到檔案時,您可以將 stderr 重定向到。
@echo off
Move /Y "C:\Folder\SubFolder\filename.txt" "%TEMP%" 2>nul
(dir /b "C:\Folder\SubFolder\*" | find /C /V "^" | findstr /R "\<0\>") && rd /S /Q "C:\Folder\SubFolder"
編輯
正如您提到的,您現在只想移動目錄中唯一的檔案,當前代碼中的一些修改可以解決這個問題:
@echo off
set "_dir=C:\Folder\SubFolder"
set "fname=filename.txt"
(dir /b "%_dir%\*" | find /C /V "^" | findstr /R "\<1\>" >nul) && if exist "%_dir%\%fname%" (
move /Y "%_dir%\%fname%" "%temp%"
rd /S /Q "%_dir%"
)
這一次,我們檢查檔案夾中是否只有1個專案(檔案或目錄),如果是,我們測驗是否是,filename.txt如果不是,則跳過代碼塊,如果是,則移動檔案并洗掉目錄。
我創建的變數你作為_dir和fname這樣你只更新這兩個領域,而不是在所有的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/372733.html
