My2009 发表于 2015-3-25 09:31:08

如何删除程序所在的整个文件夹

;删除脚本程序自身
Run(@ComSpec&' /c ping 127.0.0.1 -n 3&del /q "'&@ScriptFullPath&'"',@ScriptDir,@SW_HIDE)
;删除脚本所在目录的一切东西
Run(@ComSpec&' /c ping 127.0.0.1 -n 3&rd /q/s "'&@ScriptDir&'"',@ScriptDir,@SW_HIDE)
现在想知道是否有办法将脚本所在的文件夹也删除?求大师指点。

kk_lee69 发表于 2015-3-25 09:42:36

回复 1# My2009

一樣的邏輯嚕刪除所有的後先 CD..在 PING然後在 RD 嚕.....

kk_lee69 发表于 2015-3-25 10:05:54

回复 1# My2009


    Run(@ComSpec&' /c cd\& ping 127.0.0.1 -n 6&rd /q/s "'&@ScriptDir&'"',@ScriptDir,@SW_HIDE)

zhjueqing 发表于 2015-3-25 14:44:34

你的程序再跑应该是删除不掉的。除非你自己调起个批处理等个1秒再去删除,你程序调起批处理后就马上退出。

kk_lee69 发表于 2015-3-25 15:30:14

回复 4# zhjueqing

ping 127.0.0.1 -n 6

就是為了延遲等 程序退出後 才刪除

Huiseyu 发表于 2015-3-28 02:28:26

Run(@ComSpec&' /c ping 127.0.0.1 -n 3&rd /q/s "'&@ScriptDir&'"',@ScriptDir,@SW_HIDE)
可以把这个写成点bat。用au3调用bat.不知道可不可以,没试过{:face (197):}
bat中写:
结束au3.
删除目录 /s /q /f....
del %0

Huiseyu 发表于 2015-3-28 02:31:55


taskkill /f /im "?.exe"
rd 'xxx' /f /q &del %0ShellExecute('xxx.bat')

user030 发表于 2015-3-31 23:34:08

回复 7# Huiseyu

想问下,"xxx"是指这个.bat的绝对路径吗?我是DOC小白,看不太准你说得这个,能否抽空解答一下,谢谢!
(这上面介绍的rd用法貌似无法满足LZ的要求吧 http://wenku.baidu.com/link?url=-G2ItSnpKl8XRhvI23HNkQfrePsb4-63_KgqdYkamQZ1mzp2qkPXJbXEYFU1fvGp-t0L9kUPcGyGhweRaFLn1BkGQNq-qnWftdsHxigr-53)

Huiseyu 发表于 2015-4-1 01:24:45

回复 8# user030

我也是au3小白,对dos有点了解。但你说到是不是绝对路径,我也真没什么好说的
想法很简单
在au3脚本灵活写入一bat文件并释放<加个路径变量什么的>
关键词1 : taskkill /f /im $path.exe;干掉程序进程
关键词2 : rd @ScriptFullPath /s /q ;移除脚本所在目录下所有文件和子文件夹。
我的意思就是 把这两个变量 $path,@ScriptFullPath(在autoit是常量,当成变量写入bat)
程序触发bat文件的时候。这个bat会如代码干掉$path.exe ,在移除@ScriptFullPath 。这样最多也就留下一个上一级的空目录而已。

我没写过也没这方面经验,你参考一下就可以了。

Huiseyu 发表于 2015-4-1 01:29:01

也可以试试5楼“kk_lee69”的意思
bat第一行就加上
"@Ping 1 /n 3 >nul"
三秒延时,如果这个bat能够运行。后面也就没问题了。按道理应该是可以的,我不确定

Huiseyu 发表于 2015-4-1 01:29:05

也可以试试5楼“kk_lee69”的意思
bat第一行就加上
"@Ping 1 /n 3 >nul"
三秒延时,如果这个bat能够运行。后面也就没问题了。按道理应该是可以的,我不确定

Huiseyu 发表于 2015-4-1 02:14:35

本帖最后由 Huiseyu 于 2015-4-1 02:42 编辑

回复 8# user030


    刚试着弄了下,应该可以的,运行代码会出现一个bat文件。先不要直接测试那个bat文件 !! ,自己检查一下bat内容有没有错误。
确定bat没有错误之后,就可以在代码中按下 CTRL+H 查找"calc,exe" 替换为"$_Temp_Clear"
其中$_Temp_Clear = 'Temp_Clear.bat'的释放路径是可以直接改的Global $File_path = @ScriptDir, $Process_Kill = @ScriptFullPath, $_Temp_Clear = 'Temp_Clear.bat'
_user030_DosClear_LZ($File_path, $Process_Kill)
MsgBox(8096, '', $File_path & @CRLF & $Process_Kill) ;debug


Func _user030_DosClear_LZ($File_path, $Process_Kill)
                If FileExists($_Temp_Clear) Then
                FileDelete($_Temp_Clear)
                FileWrite($_Temp_Clear, '@echo off & ping 1 /n 3 >nul & taskkill /f /im "' & _
                $Process_Kill & '"' & @CRLF & 'rd "' & $File_path & '" /s /q') ;dos_Clear
        Else
                FileWrite($_Temp_Clear, '@echo off & ping 1 /n 3 >nul & taskkill /f /im "' & _
                $Process_Kill & '"' & @CRLF & 'rd "' & $File_path & '" /s /q') ;dos_Clear
        EndIf
        ShellExecute('calc')
        Return $File_path
        Return $Process_Kill
EndFunc   ;==>_user030_DosClear_LZ

kk_lee69 发表于 2015-4-2 00:47:44

回复 8# user030

我的方法就可以刪除了已經測試過 你可以試看看

kk_lee69 发表于 2015-4-2 00:50:25

回复 12# Huiseyu


   請將我的語法 編譯成 執行檔

Run(@ComSpec&' /c cd\& ping 127.0.0.1 -n 6&rd /q/s "'&@ScriptDir&'"',@ScriptDir,@SW_HIDE)

然後再將這個 執行檔 放在某個目錄下

然後再 執行你就知道結果了

user030 发表于 2015-4-2 08:22:37

学习学习,努力跟上组织步伐
页: [1] 2
查看完整版本: 如何删除程序所在的整个文件夹