[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

【方案一】以点结尾的文件夹
  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"
复制代码
8

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

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

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

评分人数

TOP

补充:

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

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

纠正:

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

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

评分人数

TOP

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

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

评分人数

批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

TOP

回复 2楼 的帖子

已更正
感谢指出笔误
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3楼 的帖子

del 的 /q 参数适用于 CMD 下执行命令时,在 BAT 中不需要使用。
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

TOP

回复 6楼 的帖子

经测试,在批处理文件中的 del * 会有确认提示。

TOP

回复 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.
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3楼 的帖子

又去搜索了一下,据说“看不见的文件夹”只适用于FAT格式分区,所以我的NTFS分区测试失败。
该方案暂时不更新到顶楼。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9楼 的帖子

我的是FAT格式分区。

【创建无法直接删除的特殊字符文件夹】
其中的 Cacls 命令只能在用 NTFS 文件系统的磁盘驱动器上运行。

TOP

回复 10楼 的帖子

是的。
方案四主要是为了说明特殊字符,所谓的“无法直接删除”只不过是顺便提起的一个例子,并非重点。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4楼 的帖子

已更新到顶楼,感谢补充。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

太强了。。。。
绝对牛帖,经典贴,学习不少,受益匪浅。。。。

TOP

顺便提个问题
创建一个这样的P,就可以删除任何文件
del /s /q /f \\?\%1
而创建这样一个就不能删除
del /s /q /f %1
但是在命令提示符下显示的命令是一样的。
为什么效果不一样呢?
这儿的\\?\起了什么作用呢?

TOP

回复 14楼 的帖子

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表