Board logo

标题: [文件管理] 批处理实现畸形文件、文件夹创建、访问、重命名、删除 [打印本页]

作者: Batcher    时间: 2009-3-25 17:52     标题: 批处理实现畸形文件、文件夹创建、访问、重命名、删除

【方案一】以点结尾的文件夹
  1. rem 创建以点结尾的文件夹
  2. md "C:\test"
  3. md "C:\test\batcher..\"
复制代码
  1. rem 把以点结尾的文件夹重命名为普通文件夹
  2. rem 短文件名可以使用 dir /x 命令获得
  3. ren "C:\test\BATCHE~1" "batcher"
复制代码
  1. rem 把普通文件夹重命名为以点结尾的文件夹
  2. ren "C:\test\batcher" "batcher../"
复制代码
  1. rem 打开以点结尾的文件夹
  2. start "" "C:\test\batcher..\"
复制代码
  1. rem 进入以点结尾的文件夹
  2. rem 短文件名可以使用 dir /x 命令获得
  3. cd "C:\test\NEW~1"
复制代码
  1. rem 向以点结尾的文件夹中复制文件
  2. copy "C:\test\a.txt" "C:\test\batcher..\"
复制代码
  1. rem 删除以点结尾的文件夹中的文件
  2. rem 短文件名可以使用 dir /x 命令获得
  3. del /a /f /q "C:\test\NEW~1\a.txt"
复制代码
  1. rem 修改以点结尾的文件夹的属性为“隐藏”
  2. @echo off
  3. set DstFolder=C:\test\batcher.
  4. >"%temp%\FolderProperty.vbs" echo Set objFSO = CreateObject("Scripting.FileSystemObject").GetFolder("\\?\%DstFolder%.\")
  5. >>"%temp%\FolderProperty.vbs" echo objFSO.Attributes=objFSO.Attributes+2
  6. cscript /nologo "%temp%\FolderProperty.vbs"
复制代码
  1. rem 删除以点结尾的文件夹
  2. rd /s /q "C:\test\batcher..\"
复制代码
【方案二】以空格结尾的文件夹
  1. 基本操作与方案一大致相同,此处不再赘述。
复制代码
【方案三】系统保留字文件夹(Con, Prn, Aux, Nul, Lpt1, Com1, Com2)
  1. rem 创建系统保留字文件夹
  2. md "C:\test\batcher"
  3. md "C:\test\batcher\con\"
复制代码
  1. rem 打开系统保留字文件夹
  2. start "" "C:\test\batcher\con\"
复制代码
  1. rem 向系统保留字文件夹中复制文件
  2. copy "C:\test\batcher\a.txt" "C:\test\batcher\con\"
复制代码
  1. rem 删除系统保留字文件夹中的文件
  2. del /a /f /q "C:\test\batcher\con\a.txt"
复制代码
  1. rem 修改系统保留字文件夹的属性为“隐藏”
  2. @echo off
  3. set DstFolder=C:\test\batcher\con
  4. >"%temp%\FolderProperty.vbs" echo Set objFSO = CreateObject("Scripting.FileSystemObject").GetFolder("\\?\%DstFolder%.\")
  5. >>"%temp%\FolderProperty.vbs" echo objFSO.Attributes=objFSO.Attributes+2
  6. cscript /nologo "%temp%\FolderProperty.vbs"
复制代码
  1. rem 删除系统保留字文件夹
  2. rd /s /q "C:\test\batcher\con\"
复制代码
【方案四】特殊字符文件夹(\, /, :, *, ?, ", <, >, |)
  1. rem 创建特殊字符文件夹
  2. @echo off
  3. set "DstFolder=C:\test\batcherA\"
  4. if exist "%DstFolder%\" (
  5.   echo 文件夹%DstFolder%已存在
  6.   goto :eof
  7. )
  8. md "%DstFolder%"
  9. >"%DstFolder%\desktop.ini" echo [.ShellClassInfo]
  10. >>"%DstFolder%\desktop.ini" echo LocalizedResourceName=BatHome,-1
  11. attrib +s +h "%DstFolder%\desktop.ini"
  12. >%temp%\UnlockReg.txt echo HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\LocalizedResourceName [9]
  13. regini %temp%\UnlockReg.txt
  14. >%temp%\LockReg.txt echo HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\LocalizedResourceName [8]
  15. >>%temp%\LockReg.txt  echo "BatHome,-1" = REG_SZ "|"
  16. regini %temp%\LockReg.txt
  17. attrib +s "%DstFolder%"
复制代码
  1. rem 创建无法直接删除的特殊字符文件夹
  2. @echo off
  3. set "DstFolder=C:\test\batcherB\"
  4. if exist "%DstFolder%\" (
  5.   rem echo y|cacls "\\?\%DstFolder%\nul" /g everyone:f
  6.   rem attrib -r -a -s -h "\\?\%DstFolder%\nul"
  7.   rem del /a /f /q "\\?\%DstFolder%\nul"
  8.   echo 文件夹%DstFolder%已存在
  9.   goto :eof
  10. )
  11. md "%DstFolder%"
  12. >"%DstFolder%\desktop.ini" echo [.ShellClassInfo]
  13. >>"%DstFolder%\desktop.ini" echo LocalizedResourceName=BatHome,-1
  14. attrib +s +h "%DstFolder%\desktop.ini"
  15. >"\\?\%DstFolder%\nul" echo.
  16. attrib +s +h "%DstFolder%\desktop.ini"
  17. >%temp%\UnlockReg.txt echo HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\LocalizedResourceName [9]
  18. regini %temp%\UnlockReg.txt
  19. >%temp%\LockReg.txt echo HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\LocalizedResourceName [8]
  20. >>%temp%\LockReg.txt  echo "BatHome,-1" = REG_SZ "|"
  21. regini %temp%\LockReg.txt
  22. attrib +r +a +s +h "\\?\%DstFolder%\nul"
  23. echo y|cacls "\\?\%DstFolder%\nul" /d everyone>nul
  24. attrib +s +r "%DstFolder%"
复制代码
【方案五】以点结尾的文件
  1. rem 创建以点结尾的文件
  2. md "C:\test"
  3. echo bbs.bathome.net>"\\?\C:\test\batcher."
复制代码
  1. rem 打开以点结尾的文件
  2. notepad "\\?\C:\test\batcher."
复制代码
  1. rem 复制以点结尾的文件
  2. copy "\\?\C:\test\batcher." "\\?\C:\"
复制代码
  1. rem 修改以点结尾的文件的属性为“隐藏”
  2. @echo off
  3. set DstFile=C:\test\batcher.
  4. >"%temp%\FileProperty.vbs" echo Set objFSO = CreateObject("Scripting.FileSystemObject").GetFile("\\?\%DstFile%.\")
  5. >>"%temp%\FileProperty.vbs" echo objFSO.Attributes=objFSO.Attributes+2
  6. cscript /nologo "%temp%\FileProperty.vbs"
复制代码
  1. rem 删除以点结尾的文件
  2. del /a /f /q "\\?\C:\test\batcher."
复制代码
【方案六】系统保留字文件(Con, Prn, Aux, Nul, Lpt1, Com1, Com2)
  1. rem 创建系统保留字文件
  2. md "C:\test\batcher"
  3. echo bbs.bathome.net>"\\?\C:\test\batcher\con"
复制代码
  1. rem 打开系统保留字文件
  2. notepad "\\?\C:\test\batcher\con"
复制代码
  1. rem 复制系统保留字文件
  2. copy "\\?\C:\test\batcher\con" "\\?\C:\test"
复制代码
  1. rem 修改系统保留字文件的属性为“隐藏”
  2. @echo off
  3. set DstFile=C:\test\batcher\con
  4. >"%temp%\FileProperty.vbs" echo Set objFSO = CreateObject("Scripting.FileSystemObject").GetFile("\\?\%DstFile%.\")
  5. >>"%temp%\FileProperty.vbs" echo objFSO.Attributes=objFSO.Attributes+2
  6. cscript /nologo "%temp%\FileProperty.vbs"
复制代码
  1. rem 删除系统保留字文件
  2. del /a /f /q "\\?\C:\test\batcher\con"
复制代码

作者: cutebe    时间: 2009-3-25 18:08     标题: 方案四 前面这个写错了,嘻嘻!

rem 删除以点结尾的文件夹
rd /s /q "C:\test\batcher\con\"
作者: tireless    时间: 2009-3-25 18:32

补充:

【创建带点的文件】
echo off>"\\?\%cd%\带点文件........."

【创建看不见的文件夹】
两个点: md "\\?\%cd%\."
三个点: md ...\

纠正:

del/q 参数只有在执行 del /q * 时才需要用,单个文件不需要,*.txt 这样的也不需要。
另,发现可以始终不用 /q 参数,del /q * 可以换成 del *?

[ 本帖最后由 tireless 于 2009-3-25 18:34 编辑 ]
作者: wxcute    时间: 2009-3-25 19:20

应该还有一点罢:
将带点目录改名为一般目录,将正常目录改名为带点特殊目录。

前者好像可以用 \\.\%sDIR% 形式,后面的就不行了。
作者: Batcher    时间: 2009-3-25 19:34     标题: 回复 2楼 的帖子

已更正
感谢指出笔误
作者: wxcute    时间: 2009-3-25 20:17     标题: 回复 3楼 的帖子

del 的 /q 参数适用于 CMD 下执行命令时,在 BAT 中不需要使用。
作者: tireless    时间: 2009-3-25 20:20     标题: 回复 6楼 的帖子

经测试,在批处理文件中的 del * 会有确认提示。
作者: Batcher    时间: 2009-3-26 11:48     标题: 回复 3楼 的帖子

以点结尾的文件已经跟新到顶楼。
“看不见的文件夹”我这里测试失败:
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Test>md "\\?\%cd%\."
The filename, directory name, or volume label syntax is incorrect.

C:\Test>md ...\
The filename, directory name, or volume label syntax is incorrect.

作者: Batcher    时间: 2009-3-26 11:59     标题: 回复 3楼 的帖子

又去搜索了一下,据说“看不见的文件夹”只适用于FAT格式分区,所以我的NTFS分区测试失败。
该方案暂时不更新到顶楼。
作者: tireless    时间: 2009-3-26 12:46     标题: 回复 9楼 的帖子

我的是FAT格式分区。

【创建无法直接删除的特殊字符文件夹】
其中的 Cacls 命令只能在用 NTFS 文件系统的磁盘驱动器上运行。
作者: Batcher    时间: 2009-3-26 13:36     标题: 回复 10楼 的帖子

是的。
方案四主要是为了说明特殊字符,所谓的“无法直接删除”只不过是顺便提起的一个例子,并非重点。
作者: Batcher    时间: 2009-3-27 19:51     标题: 回复 4楼 的帖子

已更新到顶楼,感谢补充。
作者: 0428_hai    时间: 2009-5-16 12:50

太强了。。。。
绝对牛帖,经典贴,学习不少,受益匪浅。。。。
作者: 0428_hai    时间: 2009-5-16 12:54

顺便提个问题
创建一个这样的P,就可以删除任何文件
del /s /q /f \\?\%1
而创建这样一个就不能删除
del /s /q /f %1
但是在命令提示符下显示的命令是一样的。
为什么效果不一样呢?
这儿的\\?\起了什么作用呢?
作者: Batcher    时间: 2009-5-16 13:06     标题: 回复 14楼 的帖子

参考:http://bbs.bathome.net/thread-3259-1-1.html
作者: vsbat    时间: 2009-6-22 12:08

学习了
作者: i520king    时间: 2009-7-16 09:11

太好了,又学习了,
作者: Lumiere    时间: 2009-7-18 14:30     标题: 回复 3楼 的帖子

tireless兄强啊,我以为这东西没几个人知道呢,还是第一次看见有人贴在这里呢。批处理之家牛人多啊
补充:这种文件夹确实只能在FAT分区格式下查看,NTF不行,但是CMD的DIR命令下会看到两个..文件夹。还有就是,要查看这个文件夹里的内容也很简单,只需md ....\就可以了,不过是间接查看,不是直接,后面新建立的文件夹....\相当于一个快捷方式,可以在窗口界面查看原...\文件夹里的内容。而且删除....\不会影响到任何...\里的内容。神奇啊。而对于字母加点结尾的文件夹,有些类似,双击是打不开的,提示错误应用,但是如果建立一个文件夹比其少一个点的话,两个文件都可以同时打开,但是无法看到里面的内容,这是不同的一点,不过如果里面事先拷贝过文件的话其实还是存在的。比如
  1. md m..\
  2. md m
复制代码
这样文件夹m..\就可以打开,但是如果事先拷贝了东西到里面的话是无法查看到的,很奇妙,
  1. md ...\
复制代码
代码执行以后文件夹建立但是无法看到,如果查看里面的内容请
  1. md ....\
复制代码
删除这个临时查看通道或者称之为快捷方式,只需
  1. rd ....\
复制代码
大家以后有啥秘密的话就这样藏起吧,一般小菜是无论如何望尘莫及的。不过呢,唉,批处理牛人多了怕以后就没有秘密可言了。

[ 本帖最后由 Lumiere 于 2009-7-18 15:57 编辑 ]
作者: starjaymy    时间: 2009-9-14 17:09

看到这贴都有点晚了。。。
早该看这了
作者: xlw542350190    时间: 2010-1-28 13:29

这么好的贴,我竟然现在才发现……
作者: lujice    时间: 2011-1-26 09:27

这么好的贴,我竟然现在才发现……
作者: maifuu    时间: 2011-4-13 14:29

15# Batcher
楼主,请问带点的文件重命名有办法吗?我看文件的只有删除什么的~~想把一个带点的文件改成正常的名字!急需打开呀~感谢1
作者: maifuu    时间: 2011-4-13 14:32

1# Batcher


管理员大人,想把带点文件的点去掉就行~去掉后就应该手动改后缀名了吧?
作者: tmplinshi    时间: 2011-4-13 15:41

22# maifuu
  1. ren "\\?\c:\test...." test.txt
复制代码

作者: maifuu    时间: 2011-4-13 16:06

24# tmplinshi


感谢..貌似不行呢~~
这个test....  的点要这四个吗?文件带一个的说~~求指教呀.
作者: maifuu    时间: 2011-4-13 16:07

24# tmplinshi


好了好了..改成和文件一样只带一个点的了~~感谢!
作者: 807979023    时间: 2013-8-21 16:43

rem 把以点结尾的文件夹重命名为普通文件夹
rem 短文件名可以使用dir/x命令获得
ren "C:\test\BATCHE~1" "batcher"

以上测试成功,但短文件夹名如何写?

比如 c:\aa.  重命名为  c:\aa
作者: 807979023    时间: 2013-8-21 17:14

巳解决!

2个字母短文件夹名不行,
3个字母以上短文件夹名测试成功。

感谢楼主提供的好方法!
作者: acerling    时间: 2014-1-11 17:14

一个一个理解,手敲
作者: szl1123    时间: 2014-7-1 03:55

又学到不少,谢谢
作者: tail88    时间: 2014-12-26 13:41

感谢分享啊。
作者: MCRGZN    时间: 2015-8-13 23:05

不错不错不错不错不错
作者: MCRGZN    时间: 2015-8-13 23:06

不错不错不错不错不错
作者: MCRGZN    时间: 2015-8-13 23:07

不错不错不错不错不错
作者: lihwang    时间: 2016-6-3 14:18

学习,果然高手多
作者: 5209520    时间: 2018-1-30 23:24

学习不少,受益匪浅
作者: eech    时间: 2019-8-25 17:04

可以在移动硬盘上划出个100g的FAT32,来存小黄片
作者: xtwwz    时间: 2021-2-25 16:14

这贴子总结的好详细。
作者: cel    时间: 2021-10-4 23:09

我要按粘贴版上(或者快捷键提取到路径)的路径打开文件夹如何做到
作者: smss    时间: 2024-5-30 15:52

回复 1# Batcher
这样为什么获取不到短文件名
  1. @Echo off
  2. md "%Temp%\batcher..\"
  3. dir /x %Temp%\
  4. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2