中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-12 17:27
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 高手请帮忙看看这个批处理防删文件夹 查看 4,966 回复 46
31 发表于 2008-06-28 19:15 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
补充
把代码里start "" D:\TMP\sm..\替换成start "" "%CurDir%sm..\"
第一高手 第二高手

32 发表于 2008-06-28 20:04 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 19
注册 2005-12-23 21:16
20年会员
UID 47750
状态 离线
楼上,我测试了复制.cmd,还是没有把空文件夹复制到sm..\中

[ Last edited by philon on 2008-6-28 at 08:24 PM ]
33 发表于 2008-06-28 20:46 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
用/e也不行?

/E Copies directories and subdirectories, including empty ones.
Same as /S /E. May be used to modify /T.
34 发表于 2008-06-28 20:49 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 19
注册 2005-12-23 21:16
20年会员
UID 47750
状态 离线
是的,加了/e后,也没有复制过去,而且出现了不能进行周期性复制的提示,复制过去的只有非空目录和它里面的文件,当前目录下的文件都没有复制过去
35 发表于 2008-06-28 21:00 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
有必要处理空文件夹吗?
>test.txt echo.
>"test 1.log" echo.
md "test 文件夹"
md "test 文件夹.ddd"
copy /y *.txt "test 文件夹"
copy /y *.log "test 文件夹"
cls&@echo 测试文件及文件夹已创建,按任意键继续. . .&pause>nul
@rem 实际应用上面部分去掉

@echo off&mode con cols=80 lines=12
setlocal enabledelayedexpansion
set CurDir=%~dp0
title 创建或删除一个私密文件夹
if not exist sm..\nul (
md sm..\
color 5a&cls&echo.&echo 私密文件夹已创建!文件将装入私密文件夹中...&ping/n 2 127.1>nul
for /f "delims=*" %%a in ('dir/ad/s/b "%CurDir%"^|findstr /i /v "\sm."') do md "%CurDir%sm6b7e~1\%%~nxa"
for /f "delims=*" %%i in ('dir/a-d/s/b "%CurDir%"^|findstr /i /v "\sm. .bat .cmd"') do (
set "SourceFile=%%i"
set "DestinationFile=!SourceFile:%CurDir%=!"
call :xxxx "!SourceFile!" "%CurDir%sm6b7e~1\!DestinationFile!"
)
ping/n 2 127.1>nul
start "" "%CurDir%sm..\"
) else (
rd /s/q sm..\
color 5e&cls&echo.&echo 私密文件夹已删除!&ping/n 2 127.1>nul
)
color 5b&cls&echo.&echo 重复执行重新创建或删除!&ping/n 2 127.1>nul
exit

:xxxx
cls&echo 正在复制文件 "%~1" ......
xcopy /y/h/r "%~1" "%~dp2" >nul
goto:eof
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
philon +2 2008-06-28 23:32
第一高手 第二高手

36 发表于 2008-06-28 21:22 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 19
注册 2005-12-23 21:16
20年会员
UID 47750
状态 离线
fastslz
你真是高手,非常感谢!这次好了。达到了我预想的目的!再次感谢~
我把 cls&echo 正在复制文件 "%~1" ...... 改成了 cls&echo 正在复制文件 ......
哈哈
37 发表于 2008-06-28 21:31 ·  中国 广东 广州 联通
初级用户
★★
积分 167
发帖 80
注册 2005-11-07 05:08
20年会员
UID 44725
性别 男
状态 离线
Originally posted by HAT at 2008-6-28 17:34:
加个fox循环排除sm..\,然后再利用xcopy /i,也许可以实现,先吃饭去了,回来再讨论。


先把要复制进 “sm.” 文件夹的文件、文件夹复制到其它地方然后再复制回来也一样。
38 发表于 2008-06-28 22:08 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by philon at 2008-6-28 21:22:

我把 cls&echo 正在复制文件 "%~1" ...... 改成了 cls&echo 正在复制文件 ......
哈哈

:xxxx
cls&echo 正在复制文件%status%
xcopy /y/h/r "%~1" "%~dp2" >nul
set status=%status%.
goto:eof
第一高手 第二高手

39 发表于 2008-06-28 22:49 ·  中国 山西 移动
初级用户
积分 42
发帖 19
注册 2005-12-23 21:16
20年会员
UID 47750
状态 离线
再请教一下,我用您的代码后,不能更改要创建的文件夹名字?sm不能换成别的名字?比如wd或者干脆叫私密文件夹吗?是不是和那个6b7e~1有关啊,它是干吗用的?等待您的答复。
40 发表于 2008-06-28 23:40 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
汗水,你还没有搞清楚sm6b7e~1是怎么来的?
12楼讲的很明白啊,dir /x
41 发表于 2008-06-28 23:44 ·  中国 广东 广州 联通
初级用户
★★
积分 167
发帖 80
注册 2005-11-07 05:08
20年会员
UID 44725
性别 男
状态 离线
看图:


42 发表于 2008-06-28 23:48 ·  中国 山西 移动
初级用户
积分 42
发帖 19
注册 2005-12-23 21:16
20年会员
UID 47750
状态 离线
是啊,就是没法把sm改成别的名字。
43 发表于 2008-06-28 23:52 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
@echo off&mode con cols=70 lines=12
setlocal enabledelayedexpansion
set CurDir=%~dp0
color 5b&cls&echo.
set /p Name=输入一个文件夹名!不支持带空格文件夹名
if not defined Name color 0c&cls&echo.&echo 你没有输入任何字符!&&ping/n 3 127.1>nul&exit
title 创建或删除一个私密文件夹
if not exist %Name%..\nul (
md "%Name%..\"
for /f "skip=1 tokens=4*" %%a in ('dir/ad/x "%CurDir%%Name%.*"') do if not defined ShortName set "ShortName=%%a"
color 5a&cls&echo.&echo 私密文件夹已创建!文件将装入私密文件夹中...&ping/n 2 127.1>nul
for /f "delims=*" %%a in ('dir/ad/s/b "%CurDir%"^|findstr /i /v "\%Name%."') do md "%CurDir%!ShortName!\%%~nxa"
for /f "delims=*" %%i in ('dir/a-d/s/b "%CurDir%"^|findstr /i /v "\%Name%. .bat .cmd"') do (
set "SourceFile=%%i"
set "DestinationFile=!SourceFile:%CurDir%=!"
call :xxxx "!SourceFile!" "%CurDir%!ShortName!\!DestinationFile!"
)
ping/n 2 127.1>nul
start "" "%CurDir%%Name%..\"
) else (
rd /s/q "%Name%..\"
color 5e&cls&echo.&echo 私密文件夹已删除!&ping/n 2 127.1>nul
)
color 5b&cls&echo.&echo 重复执行重新创建或删除!&ping/n 2 127.1>nul
exit

:xxxx
if not defined count set count=0
if %count% gtr 50 set status=.&set count=1
cls&echo 正在复制文件%status%..
xcopy /y/h/r "%~1" "%~dp2" >nul
set status=%status%.&set /a count+=1
goto:eof


当Name变量没有定义或定义为空格字符时 rd /s/q %Name%..\将执行删除父目录里所有文件夹,任何损失和本人无关,所以请不要随便更改代码
第一高手 第二高手

44 发表于 2008-06-28 23:53 ·  中国 江苏 苏州 昆山市 电信
高级用户
★★
五星老土
积分 558
发帖 172
注册 2003-02-09 00:00
23年会员
UID 881
性别 男
来自 江苏
状态 离线
其实这种文件夹也好删除的, 称不上私密文件夹。

因为就像12楼说的, dir/x 什么都出来了。

比如 md g..\ 其实就可以 cd ge276~1, 然后随便你怎么搞了。道理和 sm6b7e~1一样
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
45 发表于 2008-06-29 01:15 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 19
注册 2005-12-23 21:16
20年会员
UID 47750
状态 离线
感谢hat兄,感谢fastslz兄,感谢12楼的朋友。
我终于做成了我需要的p文件。我的p文件为:防删文件夹.bat
要创建的文件夹叫:私密文件夹..\
把当前目录下除防删文件夹.bat和私密文件夹..\以外的所有文件、文件夹复制到私密文件夹..\中。我修改了fastslz兄的代码如下:
@echo off&mode con cols=80 lines=12
setlocal enabledelayedexpansion
set CurDir=%~dp0
title 创建或删除一个私密文件夹
if not exist 私密文件夹..\nul (
md 私密文件夹..\
color 5a&cls&echo.&echo 私密文件夹已创建!当前目录下的所有内容将被拷贝到私密文

件夹中...&ping/n 2 127.1>nul
for /f "delims=*" %%a in ('dir/ad/s/b "%CurDir%"^|findstr /i /v "\私密文件

夹."') do md "%CurDir%私密文~1\%%~nxa"
for /f "delims=*" %%i in ('dir/a-d/s/b "%CurDir%"^|findstr /i /v "\防删文件

夹."') do (
set "SourceFile=%%i"
set "DestinationFile=!SourceFile:%CurDir%=!"
call :xxxx "!SourceFile!" "%CurDir%私密文~1\!DestinationFile!"
)
ping/n 2 127.1>nul
start "" "%CurDir%私密文件夹..\"
) else (
rd /s/q 私密文件夹..\
color 5e&cls&echo.&echo 私密文件夹已删除!&ping/n 2 127.1>nul
)
color 5b&cls&echo.&echo 重复执行重新创建或删除!&ping/n 3 127.1>nul
exit

:xxxx
cls&echo 正在复制文件%status%
xcopy /y/h/r "%~1" "%~dp2" >nul
set status=%status%.
goto:eof
注,虽然没什么大的用处,但使我学习了一些东西,再次感谢几位热心的朋友!
论坛跳转: