如何在没有命令提示符的情况下从文件中删除“系统文件”属性?

Ozt*_* C. 7 windows windows-7 windows-explorer command-line

是否可以在不使用命令提示符的情况下删除文件的“系统”文件属性?基本上,我想这样做:

attrib "folder" -s
attrib "file" -s
Run Code Online (Sandbox Code Playgroud)

不使用命令提示符或批处理文件。Windows 资源管理器属性菜单允许您对隐藏和只读属性执行此操作,有没有办法对系统属性执行此操作?

pad*_*ddy 9

如果您想要一些可以从上下文菜单中执行的操作,如果您经常尝试执行此操作,这里有一种方法可以为您节省一些时间:

创建批处理文件 RemoveSysAttrib.bat

@echo off
attrib -s "%1%"
Run Code Online (Sandbox Code Playgroud)

然后按照本指南将自定义应用程序添加到上下文菜单:如何将任何应用程序添加到 Windows 桌面右键单击菜单

然后,您可以使用批处理文件创建一个名为“删除系统属性”的菜单项。这样,您还可以创建一个脚本来重新添加属性。让它适用于多个文件选择可能有点繁琐,但幸运的是它会为每个选定的项目启动一次文件。你会想要测试这个:

@echo off
echo %1%
pause
Run Code Online (Sandbox Code Playgroud)

如果它将文件名作为属性 1、2、3 等提供,则您必须遍历所有参数。如果提供了多个参数,您可以像这样递归调用您的脚本:

if NOT "%2%"=="" (
    for %%A in (%*) do (
        RemoveSysAttrib.bat "%%A"
    )
) else (
    attrib -s "%1%"
)
Run Code Online (Sandbox Code Playgroud)

希望有帮助=)


针对 Synetech 的评论:

当您使用 时attrib,如果设置了另一个,则不会更改HS设置(它会说不重置 XXXX 文件)。您需要剥离(或设置)两者,然后将您不想修改的那个改回之前的样子。

我扩展了脚本以检查 Windows 7attrib命令报告的“H”属性。为了使它更通用,您需要检查更多的子字符串位置,因为我有一种预感,它在其他版本中有所不同。我现在手边没有其他版本的 Windows,所以我无法检查。

@echo off
setlocal enabledelayedexpansion

:: Check if file is hidden - works on Windows 7
set hidden=0
for /f "delims=" %%A in ('attrib "%1%"') do (
    set attr=%%A
    if "!attr:~4,1!"=="H" set hidden=1
)

:: If file is hidden, remove both attributes, then hide again.
if %hidden%==1 (
    attrib -S -H "%1%"
    attrib +H "%1%"
) else (
    attrib -S "%1%"
)

endlocal
Run Code Online (Sandbox Code Playgroud)