标题:求助:为什么我用 rmdir /s 命令删除不了目录和目录下的文件?
只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
刚查了一下,是Windows提供的脚本系统,跟控制台的rmdir一样的。

授人以渔,不授人以鱼。
2012-07-30 17:53
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 11楼 TonyDeng
下面的代码是你几个月前写的
程序代码:
SET DEFAULT TO "D:\HS"
CLEAR ALL
CLEAR
DELDIR("A", .F.)
CLEAR ALL
INKEY(1) &&延时,删除 DELDIR.BAT 文件
DELETE FILE DELDIR.BAT
RETURN

*-----------------------------------------------------------
* 參數:tcDir -- 當前默認路徑下的文件夾名,也可以用絕對路徑
*       tlQuestion -- 是否需要確認,默認為要
*-----------------------------------------------------------
PROCEDURE DELDIR(TCDIR, TLQUESTION)
IF (PCOUNT() < 2) .OR. (VARTYPE(TLQUESTION) != "L")
   TLQUESTION = .T.
ENDIF
IF TLQUESTION .AND. (MESSAGEBOX("您确认删除文件夹" + TCDIR + "中的一切内容吗?", 32 + 4 + 256) != 6)
   RETURN
ENDIF
STRTOFILE("RD &tcDir /S /Q", "DELDIR.BAT")
RUN /N7 DELDIR.BAT
ENDPROC

坚守VFP最后的阵地
2012-07-30 17:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
这样你都能找得出来

授人以渔,不授人以鱼。
2012-07-30 18:04
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 13楼 TonyDeng
做为经典收藏起来的

坚守VFP最后的阵地
2012-07-30 18:12
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
得分:3 
来段api的,删除到回收站
程序代码:
m.lcSrc = 'C:\Output'
m.lcTag = 'c:'     && 删除时用不到,另有他用

*!* === api 函数声明及所用结构、常数 ===
DECLARE Long GlobalAlloc IN WIN32API Long, Long
DECLARE Long GlobalFree IN WIN32API Long
DECLARE Long SHFileOperation IN Shell32 String @ lpFileOp
*!* --- SHFileOperation 函数使用的结构声明 ---
*!*    typedef struct _SHFILEOPSTRUCT{
*!*        HWND         hwnd;
*!*        UINT         wFunc;
*!*        LPCSTR       pFrom;
*!*        LPCSTR       pTo;
*!*        FILEOP_FLAGS fFlags;
*!*        BOOL         fAnyOperationsAborted;
*!*        LPVOID       hNameMappings;
*!*        LPCSTR       lpszProgressTitle;
*!*    } SHFILEOPSTRUCT
*!* --- SHFileOperation 结构 wFunc 成员可取值 ---
#define FO_MOVE           0x0001
#define FO_COPY           0x0002
#define FO_DELETE         0x0003
#define FO_RENAME         0x0004
*!* --- SHFileOperation 结构 fFlags 成员可取值(可组合使用) ---
#define FOF_MULTIDESTFILES         0x0001
#define FOF_SILENT                 0x0004   && don't create progress/report
#define FOF_RENAMEONCOLLISION      0x0008
#define FOF_NOCONFIRMATION         0x0010   && Don't prompt the user.
#define FOF_WANTMAPPINGHANDLE      0x0020   && Fill in SHFILEOPSTRUCT.hNameMappings
&& Must be freed using SHFreeNameMappings
#define FOF_ALLOWUNDO              0x0040
#define FOF_FILESONLY              0x0080   && on *.*, do only files
#define FOF_SIMPLEPROGRESS         0x0100   && means don't show names of files
#define FOF_NOCONFIRMMKDIR         0x0200   && don't confirm making any needed dirs
#define FOF_NOERRORUI              0x0400   && don't put up error UI
#define FOF_NOCOPYSECURITYATTRIBS  0x0800   && dont copy NT file Security Attributes
#define FOF_NORECURSION            0x1000   && don't recurse into directories.

*!* 申请内存,复制字符串,构造 api 函数要使用的结构体
m.lnPtr1 = GlobalAlloc(0x40, 2 + LEN(m.lcSrc))
SYS(2600, m.lnPtr1, LEN(m.lcSrc), m.lcSrc)
m.lnPtr2 = GlobalAlloc(0x40, 2 ) &&+ LEN(m.lcTag)
SYS(2600, m.lnPtr2, LEN(m.lcTag), m.lcTag)
m.lcFileOp = ;
      BINTOC(0, '4rs') + BINTOC(FO_DELETE, '4rs') ;
    + BINTOC(m.lnPtr1, '4rs') + BINTOC(m.lnPtr2, '4rs') ;
    + BINTOC(BITOR(FOF_MULTIDESTFILES, FOF_ALLOWUNDO, FOF_NOERRORUI), '2rs') ;
    + REPLICATE(CHR(0), 1+4+4)
*!* 调用 api 函数完成操作
m.lnResult = SHFileOperation(@ m.lcFileOp)
*!* 释放申请的内存资源
GlobalFree(m.lnPtr1)
GlobalFree(m.lnPtr2)
*!* 显示操作结果
DO CASE
CASE 0 == m.lnResult
    MESSAGEBOX('操作成功。', 64, '???')
CASE 0 != CTOBIN(SUBSTR(m.lcFileOp, 19, 2), '2rs')
    MESSAGEBOX('用户取消了操作!', 48, '???')
OTHERWISE
    MESSAGEBOX('操作失败!错误代码:' + TRANSFORM(m.lnResult), 16, '???')
ENDCASE



个性太多,无法显示
2012-07-31 14:02
不黑的乌鸦
Rank: 1
来 自:南宁市
等 级:新手上路
帖 子:10
专家分:3
注 册:2008-2-7
得分:3 
可以直接用vfp的命令。先删除文件夹下的全部文件
dele file E:\新建文件夹\数据\*.*
当文件夹 E:\新建文件夹\数据\  没有文件和子文件夹之后,才能用VFP命令删除文件夹。否则无法删除。
RD E:\新建文件夹\数据

[ 本帖最后由 不黑的乌鸦 于 2012-7-31 23:12 编辑 ]
2012-07-31 23:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
有一些隐藏和只读文件不是那么容易删除的。

授人以渔,不授人以鱼。
2012-08-01 12:11
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:3 
直接用API SHFileOperation 吧。

我们都在路上。。。。。
2012-08-01 12:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
不用那么多指令的,VFP的ADIR()可以获得文件夹中所有文件(包括子目录)的清单,里面有文件属性,只要没发现RHS之类的文件,都可以删了,如果有RH,调用API的SetFileAttribute()修改之再删掉即可。如果不想麻烦,用系统的内部命令rmdir删除目录树就是了,操作系统自己有办法处理那些事情。

授人以渔,不授人以鱼。
2012-08-01 12:24
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:0 
打开win8的语音功能,高呼两声:干掉文件夹,干掉文件夹。。。这个问题就搞定了。
以后的编程就这么简单。

我们都在路上。。。。。
2012-08-01 14:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-374380-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.933537 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved