iT邦幫忙

1

使用CMD 刪除特定檔案

  • 分享至 

  • xImage

我想要在D:\TEST\ 下面刪除所有除了LIST.TXT的 TXT檔案

有找到類似以下的指令,但執行只會刪掉該目錄下的,而且LIST也會被刪除。

 for %i in (D:\TEST\*.*) do if not "%%i"=="LIST.TXT" del /q "%i" 

請教一下我要怎麼改寫比較好,謝謝。

看更多先前的討論...收起先前的討論...
win895564 iT邦新手 1 級 ‧ 2023-05-23 15:40:04 檢舉
for /R D:\TEST\ %%G in (*.txt) do if not "%%~nxG"=="LIST.TXT" del "%%G"
算我拜託你改用powershell,只是把cmd改名叫powershell而已

Remove-Item D:\test\*.txt -Exclude list.txt
一句搞定

powershell也有批次檔,副檔名叫 ps1 ........ 對,第一代playstation的意思
石頭 iT邦研究生 4 級 ‧ 2023-05-23 16:18:51 檢舉
如果我是要該資料夾裡面的子資料夾也要做這些動作的話 請問我該怎麼下指令?
一樣一句完成,用管道符連結
Get-ChildItem -Path "D:\TEST\" -Include *.txt -Recurse | Where-Object { $_.Name -ne "LIST.TXT" } | Remove-Item -Force
石頭 iT邦研究生 4 級 ‧ 2023-05-23 16:43:10 檢舉
會顯示錯誤: 檔案無法載入,因為這個系統上已停用指令碼執行。
zero iT邦好手 1 級 ‧ 2023-05-23 17:57:25 檢舉
GPO沒綁定原則的話,先在Get-ChildItem這段指令前面加上-ExecutionPolicy RemoteSigned

EX: Powershell -ExecutionPolicy RemoteSigned Write-Output "Hello"
如果你可以用系統管理員權限執行的話,再試看看
石頭 iT邦研究生 4 級 ‧ 2023-05-24 09:26:16 檢舉
都還是不行 出現一樣的錯誤
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
re.Zero
iT邦研究生 5 級 ‧ 2023-05-23 22:56:00
最佳解答

About Win-Cmd and .Bat file.

在 Win-Cmd (or 命令提示字元) 內, 使用 for 命令時, for 參數 的語法為 %A, 例如:

FOR %G IN (a0,b1,c2) DO @echo %G

.bat (or .cmd、 批次檔) 內, 使用 for 命令時, for 參數 的語法為 %%A (註1), 例如:

FOR %%G IN (a0,b1,c2) DO @echo %%G

備註:

  • 註1: 因為系統程式在對 .bat 做語法剖析時, 在 .bat 內需要用 %% 來生成給 for 語句 使用的 %
    其他例子還有 set /a "modulo=14%%3" 等。

而你的 我想要在D:\TEST\ 下面刪除所有除了LIST.TXT的 TXT檔案 , 可參考 win895564大 在討論內提供的解答:
( 我小改了一下: 用 " 含括路徑; 用 @ 做分段; 用 if /i 啟用大小寫無差別模式。 )

rem ## 這是給 .bat 檔案用:
for /R "D:\TEST\" %%G in (*.txt) do @if /i not "%%~nxG"=="LIST.TXT" @del "%%~G"

若是想在 Win-Cmd (or 命令提示字元) 內直接下命令,就要用下面寫法:
( 就只是把在 .bat 用的 %% 改以 % 取代。 )

rem ## 這是給 Win-Cmd 用:
for /R "D:\TEST\" %G in (*.txt) do @if /i not "%~nxG"=="LIST.TXT" @del "%~G"

About PowerShell.

你在 PowerShell 遇上的 錯誤: 檔案無法載入,因為這個系統上已停用指令碼執行。, 大概 ( 因為你沒說你的情境, 所以用猜的~ ) 是因為 PowerShell 有一項安全功能: Execution policy / 執行原則, 這可控制 PowerShell 載入組態檔和執行腳本的條件。 此功能主要是用以降低執行惡意指令碼的風險。 你可在 PowerShell 用 Get-ExecutionPolicy -List 查詢此安全功能的目前設定。

若想要以後皆允許執行自己寫的 .PS1, 一般可用 Set-ExecutionPolicy RemoteSigned 命令打開權限。
(Set-ExecutionPolicy 需要管理員權限。 其他細節請參閱 Set-ExecutionPolicy 。 )

如果有風險考量而只想要臨時的執行權限, 可參考 zero大 的建議, 呼叫一個具有臨時的執行權限之 powershell.exe, 執行你的腳本:

## 執行腳本檔案:
powershell.exe -ExecutionPolicy RemoteSigned -Command '.\myScript.ps1'
石頭 iT邦研究生 4 級 ‧ 2023-05-24 09:30:05 檢舉

非常感謝! 您的方式我測試起來運行正常!

我要發表回答

立即登入回答