是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总是空的。猜猜我不能在循环中这样设置它?
感谢任何帮助。谢谢!
答案 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"