2017-08-14 122 views
1

我有一個批處理文件中的循環刪除目錄(Windows 7)中的所有,但除了一個文件。但它會掛斷,因爲它仍然會將命令發送到屏幕,即使我以爲我已經壓制了它。下面是我使用的命令:刪除所有,但一個文件循環與蝙蝠腳本

for %i in (*) do if not %i == UPDATE.BAT del /s %i >nul 2>&1 

測試了我的批處理腳本,日誌顯示它的權利在此命令停止。在命令行測試命令,將「del/s file.ext> nul 2> & 1」命令輸出到目錄中每個文件的提示符,這是導致我的批處理文件掛起的原因。

我需要在這裏更改什麼?

+0

你看到了什麼輸出?如果你刪除'> nul'部分呢?無論如何,我敢肯定,你需要的/ q(也可能是/ f和/ a)標誌'del' –

+0

我看到'如果不是file.ext == UPDATE.BAT del/s file.ext> nul 2>&1'爲目錄中的每個文件。我試過了,沒有'> nul',那也沒用。 – BigRedEO

+0

即使擺脫'/ s'也不能阻止它爲每個找到的文件輸出一條命令到命令行。 – BigRedEO

回答

2

如果這是直接在打開的cmd窗口而不是批處理,
您可以使用前導符@來抑制當前命令的輸出。

@for %i in (*) do @if /i not "%i"=="UPDATE.BAT" @del "%i" >nul 2>&1 

在命令的批觸發輸出與@Echo off和可變的兩倍%跡象。

@Echo off 
for %%i in (*) do if /i not "%%i"=="%~nx0" del "%%i" >nul 2>&1 
+0

這種情況下不需要'/ S'選項,'/ Q'選項絕對不是必需的。 – Compo

+0

那麼,(@)中的@ @%i做@if/i不是「%i」==「%〜nx0」@del/q/s「%i」> nul 2>&1'在命令行,但'@Echo off for %% i(*)do if/i not「%i」==「%〜nx0」del/q/s「%% i」> nul 2>&1'在批處理腳本中不起作用 - 仍然在日誌中顯示它掛在該命令處。 – BigRedEO

+0

@BigRedEO錯過了將'%i'加倍變更爲'%% i'的情況。 Compo是正確的/ S/Q不'有道理。 – LotPings