编写历程:
前段日子,晚上下班回家,一个舍友问我可不可以将一个目录下的隐藏文件全部显示出来(变成非隐藏文件),我说可以。
之后就开始大刀阔斧的寻找方法来做这件事,上网找,说需要一个Windows下的小工具,但是舍友的笔记本上未安装此工具。
那就找bat脚本进行遍历之后修改,可是弄了好半天bat脚本没有执行成功(主要是bat脚本好久不写了,生疏太多)。
自己亦感觉有些挂不住面子了,因为时间确实有些晚了,还没有任何改变的(变为非隐藏文件)迹象。
遂舍友说太晚,明日上班,大家先休息吧。
但总感觉自己是行的,是可以的,是没有问题的。
所以第二日上班,利用午休时间实现了一个小功能,即改变文件属性的小脚本,
对文件属性为:只读/存档/系统文件/隐藏文件/普通/脱机文件/临时文件 的一系列文件属性问题进行增加和删除的实现。
希望对大家有所启发。
具体实现如下:
#cs ____________________________________
Au3 版本:
脚本作者: wozijisunEmail: 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()SelectCase $msg == $OK_btn$file = GUICtrlRead($filePath)If Not FileExists($file) ThenMsgBox(0, "Info", "输入一个目录!")ContinueLoopEndIf$att = FileGetAttrib($file)If StringInStr($att, "D") == 0 ThenMsgBox(0, "Info", "输入一个目录!")ContinueLoopEndIfIf StringLen($file) == 0 ThenMsgBox(0, "Info", "输入一个目录!")ContinueLoopElseIf Not FileExists($file & "\D_I_R") ThenDirCreate($file & "\D_I_R")EndIfEndIf$search = FileFindFirstFile($file & "\*")If $search = -1 ThenMsgBox(0, "Info", "没有信息了。")Exit EndIfWhile 1$f = FileFindNextFile($search)If @error ThenMsgBox(0,"Info","好了,成功了。结果在D_I_R目录下。")ExitLoopEndIfIf $f == "D_I_R" ThenContinueLoopEndIf$att = FileGetAttrib($file & "\" & $f)If StringInStr($att, "H") <> 0 ThenDirCreate($file & "\D_I_R\" & $f)FileMove($file & "\" & $f, $file & "\D_I_R\" & $f)FileSetAttrib($file & "\D_I_R\" & $f & "\" & $f, "-H")EndIfWEndFileClose($search)Case $msg == $Display_btn$file = GUICtrlRead($filePath) ;获取目录If Not FileExists($file) ThenMsgBox(0, "Info", "输入一个目录!")ContinueLoopEndIf$att = FileGetAttrib($file) ;获取目录属性If StringInStr($att, "D") == 0 ThenMsgBox(0, "Info", "输入一个目录!")ContinueLoopEndIfIf StringLen($file) == 0 ThenMsgBox(0, "Info", "输入一个目录!")ContinueLoopEndIf$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"ElseMsgBox(0, "info", "There is something wrong with attribute.")ContinueLoopEndIf$mark = "" ;获取增加或删除的指令If BitAND(GUICtrlRead($do_radio), $GUI_CHECKED) = $GUI_CHECKED Then$mark = "+"EndIfIf BitAND(GUICtrlRead($undo_radio), $GUI_CHECKED) = $GUI_CHECKED Then$mark = "-"EndIf$do_mark = $mark & $flag ;标记要增加还是要删除的属性$search = FileFindFirstFile($file & "\*")If $search = -1 ThenMsgBox(0, "Info", "没有信息了。")Exit EndIfWhile 1$f = FileFindNextFile($search)If @error ThenMsgBox(0,"Info","好了,成功了。结果在D_I_R目录下。")ExitLoopEndIfIf $f == "D_I_R" ThenContinueLoopEndIf;$att = FileGetAttrib($file & "\" & $f);If StringInStr($att, "H") <> 0 Then ;可以做条件筛选,进行定向改变文件属性FileSetAttrib($file & "\" & $f, $do_mark);FileSetAttrib($file & "\" & $f, $do_mark, 1) ;设置为1时会遍历目录下所有子目录及文件;EndIfWEndFileClose($search)Case $msg == $Cancel_btn Or $msg == $GUI_EVENT_CLOSEExit 1EndSelectUntil $msg == $GUI_EVENT_CLOSEEndFunc