簡體   English   中英

Windows等效find -delete

[英]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 /excluderobocopy /X...中可能是例外。 因此,我建議您將除例外之外的所有內容復制到一種備份文件夾中,刪除所有原始文件(包括例外),然后將所有內容放回原處。

您可能會使用for /Rif ,如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM