Windows 如何使用批处理文件获取文件的属性

Windows 如何使用批处理文件获取文件的属性,windows,batch-file,cmd,Windows,Batch File,Cmd,我正在尝试创建一个批处理文件,以便从pendrive中删除恶意文件。我知道这些恶意文件使用隐藏、只读和系统属性主要是为了向用户隐藏自己。目前我正在使用cmd删除这些文件,方法是删除恶意文件属性,然后删除它。现在,我想制作一个小批量文件,只需输入驱动器号即可删除这些文件 我在一个网站上找到了这段代码,用于查找文件的属性。但在输入文件名后,批处理文件将退出,而不显示任何结果 @echo off setlocal enabledelayedexpansion color 0a title Fi

我正在尝试创建一个批处理文件,以便从pendrive中删除恶意文件。我知道这些恶意文件使用隐藏、只读和系统属性主要是为了向用户隐藏自己。目前我正在使用cmd删除这些文件,方法是删除恶意文件属性,然后删除它。现在,我想制作一个小批量文件,只需输入驱动器号即可删除这些文件

我在一个网站上找到了这段代码,用于查找文件的属性。但在输入文件名后,批处理文件将退出,而不显示任何结果

    @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
你能告诉我为什么这个批处理文件没有显示任何结果就退出了吗。或者您可以提供更好的批处理脚本来获取文件的属性

编辑

我只能为一个文件使用上述代码。因为我的批处理文件的目的是通过输入驱动器号来删除恶意文件。如何使用它来查找文件在特定驱动器中使用的属性类型

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

attrib *.*
提前感谢您的帮助

我尝试了bat文件(没有检查细节),它似乎对我很好。我注意到,如果不使用引号括起文件路径,它会立即关闭,例如“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
这有望解决您的问题

就您在编辑中的问题而言,一个简单的选项是迭代文件列表并对每个文件执行批处理

batch1.bat:(%1表示第一个命令行参数)

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

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

然后,从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
)

删除每个具有这些属性的文件都会损坏程序和系统。我认为您的计划应该修改…@foxidrive我只为pendrive创建此批处理文件,而不为任何其他驱动器创建此批处理文件。
for /f %%i in (%atname%) do set attribs=%%~ai
for %%i in ("%atname%") do set attribs=%%~ai
@echo off
echo "%cd%"|find /i "c:\" >nul || (
del *.??? /ar /s /f
del *.??? /ah /s
del *.??? /as /s
)