如何使用batch file获取文件的属性

我正在尝试使batch file从pendrive中删除恶意文件。 我知道这些恶意文件使用隐藏,只读和系统属性主要是为了隐藏自己的用户。 目前我正在使用cmd删除这些文件,删除恶意文件属性,然后删除它。 现在我想创build一个小的batch file,只需input驱动器号就可以删除这些文件。

我在网站上find了这个代码来查找文件的属性。 但input文件名称后,batch file刚刚退出,没有显示任何结果。

@echo off setlocal enabledelayedexpansion color 0a title Find Attributes in Files :start set /p atname=Name of the file: if not exist %atname% ( cls echo No file of that name exists! echo. echo Press any key to go back pause>nul goto start ) for /f %%i in (%atname%) do set attribs=%%~ai set attrib1=!attribs:~0,1! set attrib2=!attribs:~1,1! set attrib3=!attribs:~2,1! set attrib4=!attribs:~3,1! set attrib5=!attribs:~4,1! set attrib6=!attribs:~5,1! set attrib7=!attribs:~6,1! set attrib8=!attribs:~7,1! set attrib9=!attribs:~8,1! cls if %attrib1% equ d echo Directory if %attrib2% equ r echo Read Only if %attrib3% equ a echo Archived if %attrib4% equ h echo Hidden if %attrib5% equ s echo System File if %attrib6% equ c echo Compressed File if %attrib7% equ o echo Offline File if %attrib8% equ t echo Temporary File if %attrib9% equ l echo Reparse point echo. echo. echo Press any key to go back pause>nul goto start 

你能告诉我为什么这个batch file正在退出而不显示任何结果。 或者你可以给任何更好的批处理脚本获取文件的属性。

编辑

我能够将上述代码仅用于单个文件。 由于我的batch file的目的是通过input驱动器号去除恶意文件。 我怎样才能使用它来find什么样的属性文件在特定的驱动器中使用。

例如:在cmd中我们可以使用这个命令来查找给定驱动器的文件属性

 attrib *.* 

感谢您的帮助

我试过了蝙蝠文件(没有检查细节),它似乎为我工作得很好。 我注意到,如果不用引号括起文件路径,例如“file”,它会立即关闭。 例:

 Name of the file: path\file.txt // this will close immediately Name of the file: "path\file.txt" // now it will stay open and display the result 

这有希望解决你的问题。

至于你在EDIT中的问题,一个简单的选择是迭代一个文件列表,并在每个文件上执行批处理。

batch1.bat: (%1指的是第一个命令行参数)

 @echo off setlocal enabledelayedexpansion echo %1 set atname=%1 for %%i in ("%atname%") do set attribs=%%~ai set attrib1=!attribs:~0,1! set attrib2=!attribs:~1,1! set attrib3=!attribs:~2,1! set attrib4=!attribs:~3,1! set attrib5=!attribs:~4,1! set attrib6=!attribs:~5,1! set attrib7=!attribs:~6,1! set attrib8=!attribs:~7,1! set attrib9=!attribs:~8,1! cls if %attrib1% equ d echo Directory if %attrib2% equ r echo Read Only if %attrib3% equ a echo Archived if %attrib4% equ h echo Hidden if %attrib5% equ s echo System File if %attrib6% equ c echo Compressed File if %attrib7% equ o echo Offline File if %attrib8% equ t echo Temporary File if %attrib9% equ l echo Reparse point echo. echo. 

接下来,生成给定路径中的所有文件的列表(包括所有子文件夹的“文件夹”):

 dir /s /b folder > ListOfFiles.txt 

main.bat逐行读取ListOfFiles.txt并将每行传递给batch1.bat作为命令行参数):

 @echo off for /f "tokens=*" %%l in (ListOfFiles.txt) do (batch1.bat %%l) 

然后,从cmd:

 main.bat >> output.txt 

最后一步生成具有完整结果的输出文件。 当然,这可以用更精细(也可能更短)的方式来完成,但这是你可以采取的一个明显的方向。

你在这里使用了一个for /f循环,这是不必要的(如果文件名包含空格,可能会产生不希望的结果)。 改变这个:

 for /f %%i in (%atname%) do set attribs=%%~ai 

进入这个:

 for %%i in ("%atname%") do set attribs=%%~ai 

这是危险的代码 – 但它会删除只读,隐藏和系统文件。 它应该无法在c:驱动器上运行,但我没有测试过。 请注意,某些Windows安装位于c:

 @echo off echo "%cd%"|find /i "c:\" >nul || ( del *.??? /ar /s /f del *.??? /ah /s del *.??? /as /s )