我正在尝试使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 )