假設我有一個看起來像這樣的目錄:
--FolderParent
--FolderChild1
--檔案1.abc
--檔案2.abcd
--FolderChild2
--檔案1.abc
--檔案2.abcd
我想洗掉 File.abc 而不洗掉 File2.abcd。我已經嘗試在FolderParent內部運行這些命令
del /S *.abc
和
del /S *".abc"
但是,這兩者也都洗掉了 File2.abcd。
uj5u.com熱心網友回復:
需要做一點作業來確認該檔案沒有長的擴展名
在dir /b命令中使用*通配符,用R regex與$ eol標志將其輸送到findstr。使用for回圈捕捉這些步驟的結果,并del其結果。
為批處理檔案增加所有%字符。
For /f "delims=" %G in ('dir /b/s/a:-D "*. abc" ^| findstr /r "[.][a][b][c]$"')Do del "%G" 2> nul
uj5u.com熱心網友回復:
你的問題是,大多數內置的命令和工具,都使用8.3的名字。你可以禁用Windows中使用它們的默認設定,(然而),它不會洗掉當時已經定義的任何'短'名稱。
因此,最簡單的方法是使用一個忽略 8.3 命名的內置工具,where.exe:
在cmd:
For /F "Delims=" %G In ('Set "PATHEXT=" ^& %SystemRoot%System32where.exe /R " .FolderParent" " *.abc" 2^> NUL') Do @Del /A /F "%G".
或者在batch-file:
@For /F "Delims=" %%G In ('Set "PATHEXT=" ^& %SystemRoot%System32where. exe /R ".FolderParent" "*.abc" 2^>NUL') Do @Del /A /F "%%G".
uj5u.com熱心網友回復:
PowerShell沒有cmd.exe的一些反常現象。當你確定正確的檔案將被洗掉,從Remove-Item命令中洗掉WhatIf。
Get-ChildItem -Recurse -Path 'C:ParentFolder' -Filter '*.abc' | Remove-Item -WhatIf
如果你必須從cmd.exe運行:
powershell -Nologo -NoProfile -Command ^.
"Get-ChildItem -Recurse -Path 'C:ParentFolder' -Filter '*.abc' | Remove-Item -WhatIf
"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/329606.html
標籤:
