Batch file 使用.bat测试文件夹属性

Batch file 使用.bat测试文件夹属性,batch-file,cmd,directory,attributes,Batch File,Cmd,Directory,Attributes,iam使用.bat代码检查文件夹属性是否为(隐藏+系统),然后将其更改为(不隐藏+非系统) “MTD”是一个文件夹 代码: 感谢通过@Compo和dbenham()的帖子重写,这篇文章完全被重写了。它是非常硬编码的特定字符位置,这不是一个好主意 当显示正确的ATTRIB命令将在正确的目录上运行时,请从ATTRIB命令中删除echo @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "delims=" %%A IN ('DIR /B /A:H')

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

代码:


感谢

通过@Compo和dbenham()的帖子重写,这篇文章完全被重写了。它是非常硬编码的特定字符位置,这不是一个好主意

当显示正确的
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'
    }

嗨,我找到了解决办法

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

ocker文件夹.bat
?我很难理解你在说什么以及你想要实现什么。一个改变看起来不像一个测试,但是,你尝试了什么,它是如何失败的?请更新您的问题,以包括您尝试过的代码,解释它的作用以及与您期望的不同之处。我更新问题感谢您的时间据我所知,您不需要检查当前属性状态,只需添加您需要的就足够了。亲爱的Compo,我无法理解您的解决方案仅使用
Attrib-H-S“MTD”
是必要的,您不需要在设置所需属性之前确定现有属性是什么。如果目标尚未隐藏和/或系统,则不会发生任何事情,如果已隐藏,则将执行更改。但是,请注意,您可能也需要以适当的权限运行该命令。
/A:H/A:S
/A:S
完全相同,
Dir
命令仅使用最后一个
/A
选项(如果有多个)。此外,我认为值得一提的是,
DIR/B/A:HS
将输出所有匹配这两个属性的文件和目录,但我不确定是否要确定具有这两个属性的文件和目录,或者具有这两个属性的文件和目录。OP似乎也在查找目录属性,因此如果他们只查找具有隐藏属性和系统属性的目录,我建议
('DIR/A:DHS/b2^>NUL')
。从技术上讲,您不会将其作为单个命令来执行,而是创建它,然后设置它的属性。我可以生成dir代码,然后更改属性,但是如果它存在呢?你在哪里创建它,@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
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