找回密码
 加入
搜索
查看: 7829|回复: 17

[AU3基础] 如何删除程序所在的整个文件夹

  [复制链接]
发表于 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)
现在想知道是否有办法将脚本所在的文件夹也删除?求大师指点。
发表于 2015-3-25 09:42:36 | 显示全部楼层
回复 1# My2009

一樣的邏輯嚕  刪除所有的後  先 CD..  在 PING  然後在 RD 嚕.....
发表于 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)
发表于 2015-3-25 14:44:34 | 显示全部楼层
你的程序再跑应该是删除不掉的。除非你自己调起个批处理等个1秒再去删除,你程序调起批处理后就马上退出。
发表于 2015-3-25 15:30:14 | 显示全部楼层
回复 4# zhjueqing

ping 127.0.0.1 -n 6

就是為了延遲  等 程序退出後 才刪除
发表于 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.不知道可不可以,没试过
bat中写:
结束au3.
删除目录 /s /q /f....
del %0
发表于 2015-3-28 02:31:55 | 显示全部楼层
[xxx.bat]
taskkill /f /im "?.exe"
rd 'xxx' /f /q &del %0
ShellExecute('xxx.bat')
发表于 2015-3-31 23:34:08 | 显示全部楼层
回复 7# Huiseyu

想问下,"xxx"是指这个.bat的绝对路径吗?  我是DOC小白,看不太准你说得这个,能否抽空解答一下,谢谢!
(这上面介绍的rd用法貌似无法满足LZ的要求吧 http://wenku.baidu.com/link?url= ... QNq-qnWftdsHxigr-53)
发表于 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 。这样最多也就留下一个上一级的空目录而已。

我没写过也没这方面经验,你参考一下就可以了。
发表于 2015-4-1 01:29:01 | 显示全部楼层
也可以试试5楼“kk_lee69”的意思
bat第一行就加上
"@Ping 1 /n 3 >nul"
三秒延时,如果这个bat能够运行。后面也就没问题了。按道理应该是可以的,我不确定
发表于 2015-4-1 01:29:05 | 显示全部楼层
也可以试试5楼“kk_lee69”的意思
bat第一行就加上
"@Ping 1 /n 3 >nul"
三秒延时,如果这个bat能够运行。后面也就没问题了。按道理应该是可以的,我不确定
发表于 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

评分

参与人数 1金钱 +10 收起 理由
user030 + 10

查看全部评分

发表于 2015-4-2 00:47:44 | 显示全部楼层
回复 8# user030

我的方法就可以刪除了  已經測試過 你可以試看看
发表于 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)

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

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

评分

参与人数 2金钱 +20 收起 理由
user030 + 10
Huiseyu + 10 学习了

查看全部评分

发表于 2015-4-2 08:22:37 | 显示全部楼层
学习学习,努力跟上组织步伐
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-17 19:04 , Processed in 0.098701 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表