• 使用AutoIT对增加和删除文件属性的实现


    编写历程:

      前段日子,晚上下班回家,一个舍友问我可不可以将一个目录下的隐藏文件全部显示出来(变成非隐藏文件),我说可以。

      之后就开始大刀阔斧的寻找方法来做这件事,上网找,说需要一个Windows下的小工具,但是舍友的笔记本上未安装此工具。

      那就找bat脚本进行遍历之后修改,可是弄了好半天bat脚本没有执行成功(主要是bat脚本好久不写了,生疏太多)。

      自己亦感觉有些挂不住面子了,因为时间确实有些晚了,还没有任何改变的(变为非隐藏文件)迹象。

      遂舍友说太晚,明日上班,大家先休息吧。

      但总感觉自己是行的,是可以的,是没有问题的。

      所以第二日上班,利用午休时间实现了一个小功能,即改变文件属性的小脚本,

      对文件属性为:只读/存档/系统文件/隐藏文件/普通/脱机文件/临时文件  的一系列文件属性问题进行增加和删除的实现。

      希望对大家有所启发。

      具体实现如下:

    #cs ____________________________________

    Au3 版本:
    脚本作者: wozijisun
    Email: 
    QQ/TM: 
    脚本版本: v1.0
    脚本功能: 实现了对文件属性:只读/存档/系统文件/隐藏文件/普通/脱机文件/临时文件 ----进行增加/删除 文件属性功能

    #ce _______________脚本开始_________________

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <ComboConstants.au3>

    _main_gui()

    Func _main_gui()

    $Form1 = GUICreate("Change Directory", 450, 120, -1, -1)
    GUISetIcon(@SystemDir & "mspaint.exe", 0)
    $label1 = GUICtrlCreateLabel("Directory Path:", 30, 13)
    $filePath = GUICtrlCreateInput("", 140, 10, 280, Default)
    $label2 = GUICtrlCreateLabel("File Attribute:", 30, 43)
    $com = GUICtrlCreateCombo("", 140, 40, 140,Default,$CBS_DROPDOWNLIST + $WS_VSCROLL)
    $com_value = GUICtrlSetData($com, "READONLY --- (只读)|"& _
    "ARCHIVE ---- (存档)|"& _
    "SYSTEM - (系统文件)|"& _
    "HIDDEN - (隐藏文件)|"& _
    "NORMAL ----- (普通)|"& _
    "OFFLINE -(脱机文件)|"& _
    "TEMPORARY(临时文件)", "READONLY --- (只读)")
    GUICtrlCreateGroup("Choose",300,30,120,45)
    $do_radio = GUICtrlCreateRadio("++++", 310, 44, 40, 25) ; 增加属性单选按钮
    $undo_radio = GUICtrlCreateRadio("----", 360, 44, 40, 25) ; 删除属性单选按钮
    GUICtrlSetState(-1, $GUI_CHECKED) ; 设置默认值
    $OK_btn = GUICtrlCreateButton("MOVE ?", 85, 70, 60, 25)
    GUICtrlSetState(-1, $GUI_DISABLE) ; 不用此按钮
    $Display_btn = GUICtrlCreateButton("Display ?", 160, 70, 60, 25)
    $Cancel_btn = GUICtrlCreateButton("CLOSE ?", 235, 70, 60, 25)

    GUISetState(@SW_SHOW)

    Do
    $msg = GUIGetMsg()
    Select
    Case $msg == $OK_btn
    $file = GUICtrlRead($filePath)
    If Not FileExists($file) Then
    MsgBox(0, "Info", "输入一个目录!")
    ContinueLoop
    EndIf
    $att = FileGetAttrib($file)
    If StringInStr($att, "D") == 0 Then
    MsgBox(0, "Info", "输入一个目录!")
    ContinueLoop
    EndIf

    If StringLen($file) == 0 Then
    MsgBox(0, "Info", "输入一个目录!")
    ContinueLoop
    Else
    If Not FileExists($file & "D_I_R") Then
    DirCreate($file & "D_I_R")
    EndIf
    EndIf
    $search = FileFindFirstFile($file & "*")

    If $search = -1 Then
    MsgBox(0, "Info", "没有信息了。")
    Exit 
    EndIf

    While 1
    $f = FileFindNextFile($search)
    If @error Then
    MsgBox(0,"Info","好了,成功了。结果在D_I_R目录下。")
    ExitLoop
    EndIf

    If $f == "D_I_R" Then
    ContinueLoop
    EndIf

    $att = FileGetAttrib($file & "" & $f)

    If StringInStr($att, "H") <> 0 Then
    DirCreate($file & "D_I_R" & $f)
    FileMove($file & "" & $f, $file & "D_I_R" & $f)
    FileSetAttrib($file & "D_I_R" & $f & "" & $f, "-H")
    EndIf
    WEnd
    FileClose($search)

    Case $msg == $Display_btn
    $file = GUICtrlRead($filePath) ;获取目录
    If Not FileExists($file) Then
    MsgBox(0, "Info", "输入一个目录!")
    ContinueLoop
    EndIf
    $att = FileGetAttrib($file) ;获取目录属性
    If StringInStr($att, "D") == 0 Then
    MsgBox(0, "Info", "输入一个目录!")
    ContinueLoop
    EndIf

    If StringLen($file) == 0 Then
    MsgBox(0, "Info", "输入一个目录!")
    ContinueLoop
    EndIf
    $att_mark = GUICtrlRead($com) ; 读取属性信息
    $flag = "" ; 定义属性值
    If $att_mark == "READONLY --- (只读)" Then
    $flag = "R"
    ElseIf $att_mark == "ARCHIVE ---- (存档)" Then
    $flag = "A"
    ElseIf $att_mark == "SYSTEM - (系统文件)" Then
    $flag = "S"
    ElseIf $att_mark == "HIDDEN - (隐藏文件)" Then
    $flag = "H"
    ElseIf $att_mark == "NORMAL ----- (普通)" Then
    $flag = "N"
    ElseIf $att_mark == "OFFLINE -(脱机文件)" Then
    $flag = "O"
    ElseIf $att_mark == "TEMPORARY(临时文件)" Then
    $flag = "T"
    Else
    MsgBox(0, "info", "There is something wrong with attribute.")
    ContinueLoop
    EndIf
    $mark = "" ;获取增加或删除的指令
    If BitAND(GUICtrlRead($do_radio), $GUI_CHECKED) = $GUI_CHECKED Then
    $mark = "+"
    EndIf
    If BitAND(GUICtrlRead($undo_radio), $GUI_CHECKED) = $GUI_CHECKED Then
    $mark = "-"
    EndIf
    $do_mark = $mark & $flag ;标记要增加还是要删除的属性

    $search = FileFindFirstFile($file & "*")

    If $search = -1 Then
    MsgBox(0, "Info", "没有信息了。")
    Exit 
    EndIf

    While 1
    $f = FileFindNextFile($search)
    If @error Then
    MsgBox(0,"Info","好了,成功了。结果在D_I_R目录下。")
    ExitLoop
    EndIf

    If $f == "D_I_R" Then
    ContinueLoop
    EndIf

    ;$att = FileGetAttrib($file & "" & $f)

    ;If StringInStr($att, "H") <> 0 Then ;可以做条件筛选,进行定向改变文件属性
    FileSetAttrib($file & "" & $f, $do_mark)
    ;FileSetAttrib($file & "" & $f, $do_mark, 1) ;设置为1时会遍历目录下所有子目录及文件
    ;EndIf
    WEnd
    FileClose($search)
    Case $msg == $Cancel_btn Or $msg == $GUI_EVENT_CLOSE
    Exit 1
    EndSelect

    Until $msg == $GUI_EVENT_CLOSE
    EndFunc

  • 相关阅读:
    hadoop安装前的准备
    记录一次Qt5程序无法运行的解决过程
    C#里的Thread.Join与Control.Invoke死锁情况
    qbxt7月笔记
    zhxのDP讲
    有n*m的方格图
    最长上升子序列相关问题笔记
    qbxt游记(清北澡堂划水记
    DAZの七下道法(持续更新
    模板
  • 原文地址:https://www.cnblogs.com/wozijisun/p/6228661.html
Copyright © 2020-2023  润新知