找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 171307|回复: 40

[文件管理] 批处理实现畸形文件、文件夹创建、访问、重命名、删除

[复制链接]
发表于 2009-3-25 17:52:55 | 显示全部楼层 |阅读模式
【方案一】以点结尾的文件夹
  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"
复制代码

评分

参与人数 8PB +54 技术 +7 收起 理由
cmd1152 + 1 大佬666
老刘1号 + 1 感谢分享
Hello123World + 1 你能再犀利点吗?
Readsmoke + 1 乐于助人
rat + 30

查看全部评分

发表于 2009-3-25 18:08:23 | 显示全部楼层

方案四 前面这个写错了,嘻嘻!

rem 删除以点结尾的文件夹
rd /s /q "C:\test\batcher\con\"

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢指出笔误

查看全部评分

发表于 2009-3-25 18:32:30 | 显示全部楼层
补充:

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

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

纠正:

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

[ 本帖最后由 tireless 于 2009-3-25 18:34 编辑 ]

评分

参与人数 1PB +5 收起 理由
Batcher + 5 感谢补充

查看全部评分

发表于 2009-3-25 19:20:33 | 显示全部楼层
应该还有一点罢:
将带点目录改名为一般目录,将正常目录改名为带点特殊目录。

前者好像可以用 \\.\%sDIR% 形式,后面的就不行了。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢补充

查看全部评分

 楼主| 发表于 2009-3-25 19:34:18 | 显示全部楼层

回复 2楼 的帖子

已更正
感谢指出笔误
发表于 2009-3-25 20:17:32 | 显示全部楼层

回复 3楼 的帖子

del 的 /q 参数适用于 CMD 下执行命令时,在 BAT 中不需要使用。
发表于 2009-3-25 20:20:31 | 显示全部楼层

回复 6楼 的帖子

经测试,在批处理文件中的 del * 会有确认提示。
 楼主| 发表于 2009-3-26 11:48:23 | 显示全部楼层

回复 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.
 楼主| 发表于 2009-3-26 11:59:42 | 显示全部楼层

回复 3楼 的帖子

又去搜索了一下,据说“看不见的文件夹”只适用于FAT格式分区,所以我的NTFS分区测试失败。
该方案暂时不更新到顶楼。
发表于 2009-3-26 12:46:19 | 显示全部楼层

回复 9楼 的帖子

我的是FAT格式分区。

【创建无法直接删除的特殊字符文件夹】
其中的 Cacls 命令只能在用 NTFS 文件系统的磁盘驱动器上运行。
 楼主| 发表于 2009-3-26 13:36:03 | 显示全部楼层

回复 10楼 的帖子

是的。
方案四主要是为了说明特殊字符,所谓的“无法直接删除”只不过是顺便提起的一个例子,并非重点。
 楼主| 发表于 2009-3-27 19:51:46 | 显示全部楼层

回复 4楼 的帖子

已更新到顶楼,感谢补充。
发表于 2009-5-16 12:50:33 | 显示全部楼层
太强了。。。。
绝对牛帖,经典贴,学习不少,受益匪浅。。。。
发表于 2009-5-16 12:54:13 | 显示全部楼层
顺便提个问题
创建一个这样的P,就可以删除任何文件
del /s /q /f \\?\%1
而创建这样一个就不能删除
del /s /q /f %1
但是在命令提示符下显示的命令是一样的。
为什么效果不一样呢?
这儿的\\?\起了什么作用呢?
 楼主| 发表于 2009-5-16 13:06:35 | 显示全部楼层

回复 14楼 的帖子

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 20:19 , Processed in 0.023072 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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