如何检查Windows批处理文件中的“或equ”

时间:2017-03-06 17:47:53

标签: windows batch-file

是Windows批处理文件的新手,经过多次实验,已经在这个脚本上苦苦挣扎了8个多小时..但是没有运气......

这是我的代码

@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总是空的。猜猜我不能在循环中这样设置它?

感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分: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

如果您真的想让脚本删除文件而不是只显示删除命令,请在第6行将Echo Del %%A更改为Del %%A

答案 1 :(得分:0)

另一个选项是使用DIR命令并将其传递给FINDSTR命令,只列出您需要删除的文件。

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