2017-03-06 58 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" 
相关问题