[英]Windows equivalent find -delete
與此Linux命令等效的Windows / DOS是什么?
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
我知道如何刪除所有文件,但不知道如何指定異常(即:不刪除__init__.py
)
cmd.exe在路徑的多個級別中不支持通配符(PowerShell則支持),因此您必須以某種方式進行模擬。
Cmd行:
for /f "delims=" %F in ('Dir /B /S .\*.py ^|findstr /IE "\\migrations\\[^\\]*.py"^|findstr /IEV "\\__init__.py" ') Do @echo del "%F"
如果輸出看起來正常,請刪除echo
在批處理文件中,將百分號%F
=> %%F
加倍
電源外殼
Get-ChildItem .\*\migrations\*.py -exclude __init__.py | Remove-Item -WhatIf
如果輸出看起來正常,請刪除-WhatIf
在這個樣本樹中
> tree /F
A:.
└───test
│ alpha.py
│ bravo.py
│
└───migrations
alpha.py
bravo.py
__init__.py
輸出將是
del "A:\test\migrations\alpha.py"
del "A:\test\migrations\bravo.py"
WhatIf: Ausführen des Vorgangs "Datei entfernen" für das Ziel "A:\test\migrations\alpha.py".
WhatIf: Ausführen des Vorgangs "Datei entfernen" für das Ziel "A:\test\migrations\bravo.py".
(據我所知)在Windows / DOS搜索中是不可能的,但是在xcopy /exclude
和robocopy /X...
中可能是例外。 因此,我建議您將除例外之外的所有內容復制到一種備份文件夾中,刪除所有原始文件(包括例外),然后將所有內容放回原處。
您可能會使用for /R
和if
,如下所示:
for /r %i in (*.py) do (
if "%~ni"=="__init__" (
echo Skipping %i
) else (
echo del "%i"
)
)
在這里,我給del
命令加上了echo
前綴,因此它實際上並沒有將其刪除。 一旦看起來像在做您想要的事情,然后消除回聲。
如果在批處理文件中執行此操作,則需要將%符號加倍。
for /R
是for的遞歸,並且該格式將在當前目錄中起作用。
%~ni
說:“只給我%i的文件名部分”
(我目前正在運行Linux,因此無法驗證確切的行為,但是您可以從此開始)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.