【问题标题】:Testing Folder Attributes using .bat使用 .bat 测试文件夹属性
【发布时间】:2020-01-28 10:48:50
【问题描述】:

iam 使用 .bat 代码检查文件夹属性,如果它(隐藏 + 系统)然后将其更改为(非隐藏 + 非系统) “MTD”是文件夹

代码:

if attrib +h +s "MTD" attrib -h -s "MTD"

谢谢

【问题讨论】:

  • ocker folder.bat?我无法理解你在说什么以及你想要完成什么。更改看起来不像是一开始的测试,但是,您尝试过什么,它是如何失败的?请更新您的问题以包含您尝试过的代码,说明它的作用以及与您的预期有何不同。
  • 我更新问题感谢您的时间
  • 据我所知,您不需要检查当前的属性状态,只需添加您需要的那些就足够了。
  • 亲爱的 Compo,我无法理解您的解决方案
  • 只需要使用Attrib -H -S "MTD",在设置所需属性之前,您无需确定现有属性是什么。如果目标尚未隐藏和/或系统,则不会发生任何事情,如果是,则将执行更改。但请注意,您可能还需要以适当的权限运行该命令。

标签: batch-file cmd directory attributes


【解决方案1】:

重写感谢@Compo 和dbenham (https://stackoverflow.com/a/8669636/447901) 的帖子,这完全重写了。对于特定的字符位置,它是非常硬编码的,这不是一个好主意。

当看起来正确的ATTRIB 命令将在正确的目录上运行时,请从ATTRIB 命令中删除echo

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /F "delims=" %%A IN ('DIR /B /A:H') DO (
    FOR /F "delims=" %%B in ("%%~aA") DO (
        SET ATTRS=%%~B
        if "!ATTRS:~0,1!" == "d" if "!ATTRS:~3,2!" == "hs" (
            echo ATTRIB -H -S %%~A
        )
    )
)

这在 PowerShell 中会做得更好。这将需要当前的 PowerShell 5.x 或更高版本。其实……

Get-ChildItem -Directory -Hidden -System |
    ForEach-Object {
        $_.Attributes -= 'Hidden'
        $_.Attributes -= 'System'
    }

【讨论】:

  • lit,/A:H /A:S/A:S 完全相同,如果有多个,Dir 命令只使用最后一个/A 选项。此外,我认为可能值得一提的是DIR /B /A:HS 将输出与这两个属性匹配的所有文件和目录,但我不确定是否要确定具有这两个属性的文件和目录,或者具有其中一个或两个属性的文件和目录。 OP 似乎也在寻找目录属性,所以如果他们只寻找具有隐藏和系统属性的目录,我建议('DIR /A:DHS /B 2^>NUL')
  • 从技术上讲,您不会将其作为单个命令执行,而是创建它,然后设置其属性。
  • 我可以制作目录代码然后更改属性但是如果它存在怎么办?
  • 你在哪里创建它,@lit? MD "%UserProfile%\Desktop\MTD" 2>NUL 然后Attrib +S +H "%UserProfile%\Desktop\MTD" 应该是你所需要的。为了验证您应该能够使用Attrib "%UserProfile%\Desktop\MTD",它有望在属性序列中输出SH。那我想,这也能回答这个问题! Attrib "MTD" 2>NUL|Find "SH">NUL&&Attrib -S -H "MTD"。根据文件名,您可能需要调整实际的匹配字符串,例如"SH--",或者选择findstr
【解决方案2】:

大家好,我找到了解决方案

cls
@ECHO OFF

title Folder Locker

:CONFIRM
echo Are you sure u want to Lock the folder(Y/N)
set/p "cho=>"
if %cho%==Y goto LOCK
if %cho%==y goto LOCK
if %cho%==n goto UNLOCK
if %cho%==N goto UNLOCK
echo Invalid choice.
goto CONFIRM

:LOCK

attrib +h +s "MTD"
echo Folder locked
goto End

:UNLOCK
echo Enter password to Unlock folder
set/p "pass=>"
if NOT %pass%== 123 goto FAIL
attrib -h -s "MTD"

echo Folder Unlocked successfully
goto End
:FAIL
echo Invalid password
goto end
:End

【讨论】:

    猜你喜欢
    • 2016-11-17
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多