“如何检查”;或等同于;在windows批处理文件中

“如何检查”;或等同于;在windows批处理文件中,windows,batch-file,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

我是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) 如何使此文件夹下的所有文件和子文件夹都能正常工作

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
   )
)
托德尔总是空的。我想我不能在循环中这样设置它


感谢您的帮助。谢谢

在这段代码中,可能有一种更好的方法可以有效地执行您正在执行的操作,但这里有一个基本结构,可以帮助您更好地理解cmd.exe是如何执行此操作的

@Echo关闭
对于(*.*)中的%%A,请执行以下操作(
如果/I不是“%%~xA”=>.xml”(
如果/I不是“%%~xA”==”.java”(
Echo%%~xA文件不需要
Echo Del%%A
)否则(
需要Echo.java文件
)
)否则(
需要Echo.xml文件
)
)
超时-1

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

另一个选项是使用
DIR
命令并将其传输到
FINDSTR
命令,以仅列出需要删除的文件

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

如果阅读
if
命令的帮助文件,可能会有所帮助。在命令提示下键入
IF/?
。第二组代码的问题是您位于需要使用延迟扩展的代码块中。您必须启用延迟扩展,然后用感叹号而不是百分号引用变量。IF命令还进行字符串比较。如果你在比较的一边有引语,它们一定在另一边。嗨,Squashman,谢谢你的回复。但是我不能完全理解你在说什么。你能把你的话译成代码来显示我遗漏了什么吗?用延迟扩展引用你的变量:
echo todel=!托德尔
并在字符串比较的两侧使用引号:
如果“%%~xf”==”.xml“
这很有效。如何使此代码也适用于子曲面?蒂亚@用户1164061,通过在命令提示下键入
for/?
来阅读
for
命令的帮助。你应该看到一个对你有帮助的选项。