2017-03-06 80 views
1

是新手到Windows批處理文件,並一直在努力與此腳本與幾個實驗的時間超過8小時..但沒有運氣...如何檢查「或EQU」窗口中的批處理文件

這是我的代碼

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

FOR %%f IN (*.*) DO (
    echo %%f 
    echo %%~xf 

    IF %%~xf==".xml" |= ".java" (
    echo file needed 
    ) ELSE(
    echo file not needed 
    del %%f 
    ) 

) 

1)我無法獲得| =的工作; 「此時」獲得「意外」。「錯誤

2)如何使這個工作的所有文件和子目錄下這fodler?

3)我也試過如下:

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
FOR %%f IN (*.*) DO (
    set todel=yes 
    echo %%~xf 
    echo todel=%todel% 
    IF %%~xf==".xml" (
    todel=no 
    ) 
    IF %%~xf==".java" (
    todel=no 
    ) 
    echo todel=%todel% 
    IF %todel%=="yes" (
    del %%f 
    ) 
) 

todel總是空的。猜猜我不能這樣設置循環內?

任何幫助表示讚賞。謝謝!

+0

如果您閱讀「IF」命令的幫助文件,可能會有幫助。在命令提示符下輸入'IF /?'。 – Squashman

+0

第二組代碼的問題在於你在代碼塊中,它需要使用延遲擴展。您必須啓用延遲擴展,然後使用感嘆號而不是百分號來引用變量。 IF命令也可以進行字符串比較。如果你在比較的一邊有報價,他們必須在另一邊。 – Squashman

+0

嗨Squashman,謝謝你的回覆。我無法理解你在說什麼。你能不能把你的話放進代碼中去顯示缺少的東西? – user1164061

回答

2

在這段代碼中,可能有更好的方法來做你自己有效的工作,但這裏有一個基本的結構,可以幫助你更好地理解cmd.exe是如何做到的。

@Echo Off 
For %%A In (*.*) Do (
    If /I Not "%%~xA"==".xml" (
     If /I Not "%%~xA"==".java" (
      Echo %%~xA file not needed 
      Echo Del %%A 
     ) Else (
      Echo .java file needed 
     ) 
    ) Else (
     Echo .xml file needed 
    ) 
) 
Timeout -1 

變化Echo Del %%ADel %%A第6行,如果你真想讓腳本刪除的文件,而不是僅僅告訴你delete命令。

+0

這很好。我該如何讓這些代碼適用於子類? TIA! – user1164061

+1

@ user1164061,通過在命令提示符處鍵入'FOR /?'來閱讀FOR命令的幫助。你應該看到一個可以幫助你的選項。 – Squashman

0

另一種選擇是使用DIR命令並將其傳遞給FINDSTR命令以僅列出需要刪除的文件。

FOR /F "DELIMS=" %%G IN (`dir /b /s *.* ^|findstr /E /V ".xml .java"`) DO del "%%G" 
相關問題