标题: 高手请帮忙看看这个批处理防删文件夹
[打印本页]
作者: philon
时间: 2008-6-25 00:40
标题: 高手请帮忙看看这个批处理防删文件夹
我希望把这个批处理放到任何一个我需要的目录下,执行批处理后,在该目录下新建一个防删文件夹sm.并把该目录下所有的文件和文件夹复制到这个防删文件夹sm.中。用copy只能复制文件无法复制文件夹。用xcopy该如何处理?请高手指点!内容如下:
@echo off&mode con cols=50 lines=12
title 创建或删除一个私密文件夹
if not exist sm..\nul (
md sm..\
color 5a&cls&echo.&echo 私密文件夹已创建!文件将装入私密文件夹中...&ping/n 2 127.1>nul
echo 正在复制文件...
copy %CurDir% * sm..\>nul 2>nul
) 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
作者: pusofalse
时间: 2008-6-25 00:44
对畸形文件夹不感冒。
爱莫能助。。。帮顶。。。
不过可以利用“文件夹扩展名”把你的东西藏c:\windows\tasks文件夹中 记住一定要用copy命令,否则图形化界面无效。。。
还有浏览器 控制面板 网上邻居 管理工具 回收站 这些地方都是隐藏文件的好地方。。。。
作者: philon
时间: 2008-6-25 01:01
我再非常批处理论坛发了帖子也没人解决,郁闷!!
作者: HAT
时间: 2008-6-25 01:04
xcopy不能向畸形文件夹拷贝东西吧
楼主不会是国家核潜艇训练中心的吧
Quote: |
积分 4
发帖 1
注册 2005-12-23
状态 在线 |
|
作者: PPdos
时间: 2008-6-25 01:20
潜水三载而不冒泡乎 奇才奇才!
作者: philon
时间: 2008-6-25 01:21
哈哈哈哈,hat兄弟,见笑了。确实!
作者: jsunhj
时间: 2008-6-25 12:04
不了解,顶一下
作者: wxcute
时间: 2008-6-25 21:45
xcopy 不好这样处理当前目录。
带点目录不在当前目录下会容易点。
作者: yxn064
时间: 2008-6-26 16:14
真是高手能写这么复杂的命令!
作者: philon
时间: 2008-6-27 11:07
还是没人能解决?
作者: amio
时间: 2008-6-27 11:23
直接 建立一个你想复制的文件夹? 然后在把那个文件夹下的所有文件 复制到你刚才建那个文件夹里 ??
作者: wingface
时间: 2008-6-27 11:44
copy %CurDir% * sm6b7e~1>nul 2>nul
别问我为什么,自己用dir /x 看一下就知道了
作者: HAT
时间: 2008-6-27 11:58
Quote: |
Originally posted by wingface at 2008-6-27 11:44 AM:
copy %CurDir% * sm6b7e~1>nul 2>nul
别问我为什么,自己用dir /x 看一下就知道了 |
|
Nice job!
作者: moniuming
时间: 2008-6-27 19:18
@echo off
for /l %%a in (1 1 10000) do set "n=%%a"
echo 经过 %
n% 次测试,发现 xcopy 和 move 无法对畸形目录进行操作
pause>nul
作者: HAT
时间: 2008-6-27 20:27
标题: to 14楼
用12楼的方法可以用xcopy操作畸形目录
作者: moniuming
时间: 2008-6-27 23:17
Quote: |
Originally posted by wingface at 2008-6-27 11:44:
copy %CurDir% * sm6b7e~1>nul 2>nul
别问我为什么,自己用dir /x 看一下就知道了 |
|
厉害,这样的东西都能被发现,佩服
作者: philon
时间: 2008-6-28 16:13
Quote: |
Originally posted by HAT at 2008-6-27 20:27:
用12楼的方法可以用xcopy操作畸形目录 |
|
是可以操作,但无论copy还是xcopy都不能把文件夹复制到sm.中!!
郁闷~~
作者: HAT
时间: 2008-6-28 16:18
Quote: |
Originally posted by philon at 2008-6-28 04:13 PM:
是可以操作,但无论copy还是xcopy都不能把文件夹复制到sm.中!!
郁闷~~ |
|
我测试过,可以。
把你的xcopy命令贴出来看看。
作者: philon
时间: 2008-6-28 16:21
Quote: |
Originally posted by HAT at 2008-6-28 16:18:
我测试过,可以。
把你的xcopy命令贴出来看看。 |
|
hat兄,你看看:
@echo off&mode con cols=50 lines=12
title 创建或删除一个私密文件夹
if not exist sm..\nul (
md sm..\
color 5a&cls&echo.&echo 私密文件夹已创建!文件将装入私密文件夹中...&ping/n 2 127.1>nul
echo 正在复制文件...
xcopy %CurDir% * sm6b7e~1>nul 2>nul
) 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
作者: HAT
时间: 2008-6-28 16:22
多看看xcopy的帮助^_^
/E Copies directories and subdirectories, including empty ones.
Same as /S /E. May be used to modify /T.
作者: philon
时间: 2008-6-28 16:27
xcopy %CurDir% * sm6b7e~1/e>nul 2>nul
xcopy %CurDir% * sm6b7e~1/s/e>nul 2>nul
xcopy %CurDir% * sm6b7e~1/s/e/t>nul 2>nul
以上都不行啊!
作者: HAT
时间: 2008-6-28 16:34
look

作者: philon
时间: 2008-6-28 16:42
当然,指定源文件的绝对路径是可以复制所有文件和文件夹的,但,我要它复制当前目录下的所有文件和文件夹,是不是xcopy对%CurDir%不识别呢?
作者: philon
时间: 2008-6-28 16:51
HAT兄,还在吗?请解答一下。
作者: HAT
时间: 2008-6-28 17:10
sm..\也在当前目录下,你总不能指望把一个文件夹拷贝到它在身里面吧?
Cannot perform a cyclic copy
作者: philon
时间: 2008-6-28 17:20
也是啊,看来我开头提出的那个要求是无法实现了。
作者: philon
时间: 2008-6-28 17:22
其实复制sm..\自身是没有意义的。那有没有可能把除sm..\以外的其他所有文件夹复制到sm..\里呢?
如果能,需要加入哪些语句。还望HAT兄帮忙。
[
Last edited by philon on 2008-6-28 at 05:24 PM ]
作者: HAT
时间: 2008-6-28 17:28
xcopy只支持文件例外,不支持文件夹例外,想其它方法吧。
作者: HAT
时间: 2008-6-28 17:34
加个fox循环排除sm..\,然后再利用xcopy /i,也许可以实现,先吃饭去了,回来再讨论。
作者: fastslz
时间: 2008-6-28 19:03
复制方式.cmd
>test.txt echo.
>"test 1.log" echo.
md "test 文件夹"
copy /y *.txt "test 文件夹"
copy /y *.log "test 文件夹"
cls&@echo 测试文件及文件夹已创建,按任意键继续. . .&pause>nul
@rem 实际应用上面部分去掉
@echo off&rem mode con cols=50 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
echo 正在复制文件...
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 :xxx "%CurDir%sm6b7e~1\!DestinationFile!"
call :xxxx "!SourceFile!" "%CurDir%sm6b7e~1\!DestinationFile!"
)
ping/n 2 127.1>nul
start "" D:\TMP\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
:xxx
md "%~dp1" 2>nul
goto:eof
:xxxx
xcopy /y/h/r "%~1" "%~dp2" >nul
goto:eof
移动方式.cmd
>test.txt echo.
>"test 1.log" echo.
md "test 文件夹"
copy /y *.txt "test 文件夹"
copy /y *.log "test 文件夹"
cls&@echo 测试文件及文件夹已创建,按任意键继续. . .&pause>nul
@rem 实际应用上面部分去掉
@echo off&rem mode con cols=50 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
echo 正在复制文件...
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 :xxx "%CurDir%sm6b7e~1\!DestinationFile!"
move /y "!SourceFile!" "%CurDir%sm6b7e~1\!DestinationFile!"
)
start "" D:\TMP\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
pause
exit
:xxx
md "%~dp1" 2>nul
goto:eof
作者: fastslz
时间: 2008-6-28 19:15
补充
把代码里start "" D:\TMP\sm..\替换成start "" "%CurDir%sm..\"
作者: philon
时间: 2008-6-28 20:04
楼上,我测试了复制.cmd,还是没有把空文件夹复制到sm..\中
[
Last edited by philon on 2008-6-28 at 08:24 PM ]
作者: HAT
时间: 2008-6-28 20:46
用/e也不行?
/E Copies directories and subdirectories, including empty ones.
Same as /S /E. May be used to modify /T.
作者: philon
时间: 2008-6-28 20:49
是的,加了/e后,也没有复制过去,而且出现了不能进行周期性复制的提示,复制过去的只有非空目录和它里面的文件,当前目录下的文件都没有复制过去
作者: fastslz
时间: 2008-6-28 21:00
有必要处理空文件夹吗?
>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
作者: philon
时间: 2008-6-28 21:22
fastslz
你真是高手,非常感谢!这次好了。达到了我预想的目的!再次感谢~
我把 cls&echo 正在复制文件 "%~1" ...... 改成了 cls&echo 正在复制文件 ......
哈哈
作者: xypcmac
时间: 2008-6-28 21:31
Quote: |
Originally posted by HAT at 2008-6-28 17:34:
加个fox循环排除sm..\,然后再利用xcopy /i,也许可以实现,先吃饭去了,回来再讨论。 |
|
先把要复制进 “sm.” 文件夹的文件、文件夹复制到其它地方然后再复制回来也一样。
作者: fastslz
时间: 2008-6-28 22:08
Quote: |
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
作者: philon
时间: 2008-6-28 22:49
再请教一下,我用您的代码后,不能更改要创建的文件夹名字?sm不能换成别的名字?比如wd或者干脆叫私密文件夹吗?是不是和那个6b7e~1有关啊,它是干吗用的?等待您的答复。
作者: HAT
时间: 2008-6-28 23:40
汗水,你还没有搞清楚sm6b7e~1是怎么来的?
12楼讲的很明白啊,dir /x
作者: xypcmac
时间: 2008-6-28 23:44
看图:

作者: philon
时间: 2008-6-28 23:48
是啊,就是没法把sm改成别的名字。
作者: fastslz
时间: 2008-6-28 23:52
@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%..\将执行删除父目录里所有文件夹,任何损失和本人无关,所以请不要随便更改代码
作者: quya
时间: 2008-6-28 23:53
其实这种文件夹也好删除的, 称不上私密文件夹。
因为就像12楼说的, dir/x 什么都出来了。
比如 md g..\ 其实就可以 cd ge276~1, 然后随便你怎么搞了。道理和 sm6b7e~1一样
作者: philon
时间: 2008-6-29 01:15
感谢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
注,虽然没什么大的用处,但使我学习了一些东西,再次感谢几位热心的朋友!
作者: seuseuseu
时间: 2008-9-8 14:12
顶起来
作者: shaokui123
时间: 2010-4-12 10:24
高手,相当厉害啊!!!
请教一下,代码能修改成复制完毕后把被复制的文件立即删除吗
还有能加上指定路径的功能吗?