开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1425|回复: 2
收起左侧

[闲聊] 关于Windows文件名长度和目录深度的解释 BAT

[复制链接]
结帖率:33% (3/9)
发表于 2012-11-24 15:40:02 | 显示全部楼层 |阅读模式   四川省成都市
  1. 关于文件名长度和目录深度有很多解释,实际上很多都对又都不对。
  2. 准确而言是由Windows基础库函数,特别是关于获取文件路径名的函数的限制决定的。这个值与所谓的255,259是一致的。
  3. 但有点必须说明的是,由于这个路径名获取函数采用了全路径名,因此结论是:各级路径名全长不能超过这个值。
  4. 于是所谓的文件名长度跟所处的路径级别有关。
  5. 我做了测试代码test.bat:
  6. rem 文件开始
  7. @echo off
  8. mkdir %1
  9. cd %1
  10. copy ..\test.bat .
  11. test.bat
  12. rem 文件结束
  13. 执行上述批处理命令时会发现对于不同的入口参数%1,最终的路径深度是不同的。当超过限制时批处理命令会失败,目前只有请各位强行Break了。
  14. 大家可以尝试一下:
  15. test 1
  16. test 876543210
  17. 等等。

  18. 另附一个更好的代码供大家测试观察,两个批处理文件:main.bat和test.bat

  19. [main.bat]

  20. <span style="color: #00FF00;">@echo off

  21. if (%1) == () goto helpMsg

  22. set /a depth=0

  23. set main=yes

  24. if exist test.bat (

  25.         call test.bat %1

  26.         echo 从当前目录开始的最大目录深度为:

  27.         set depth

  28.         goto end

  29.         ) else (

  30.         echo test.bat not found.

  31.         goto end

  32.         )

  33. :helpMsg

  34. echo Usage: main foldername

  35. :end

  36. set main=

  37. </span>[test.bat]



  38. <span style="color: #3366FF;">@echo off

  39. if (%main%) == () goto helpMsg else (

  40. :loop

  41.         if exist %1 (

  42.                 cd %1

  43.                 set /a depth=depth+1

  44.                 set depth

  45.                 copy ..\test.bat . >nul

  46.                 test.bat %1

  47.                 ) else (

  48.                 mkdir %1

  49.                 echo %ERRORLEVEL%

  50.                 if errorlevel 1 goto end

  51.                 cd %1

  52.                 set /a depth=depth+1

  53.                 set depth

  54.                 copy ..\test.bat . >nul

  55.                 test.bat %1

  56.                 )

  57.         )

  58. goto loop

  59. :helpMsg

  60. echo Usage: main foldername

  61. :end</span>

  62. 最后补充一点,本人做的部分测试及前述例子均以英文字母为目录名,且未讨论最后一级目录下的文件名长度。

  63. 随后的测试表明:纯英文字母时的全路径名最长为250以内,而终极目录下文件名长度最大为11个字母。

  64. 用中文名测试发现,Windows系统(中文)对中英文一同对待,即在NTFS系统下文件名采用的是双字节表达,因此实际最大长度可以认为是500字节。

  65. 由于这个网站没有提供贴编辑功能只能重贴最后重新优化的代码如下:

  66. main.bat:

  67. <span style="color: #FF0000;">@echo off

  68. pushd .

  69. if (%1) == () goto helpMsg

  70. set /a depth=0

  71. set main=yes

  72. if exist test.bat (

  73.         call test.bat %1

  74.         echo 从当前目录开始的最大目录深度为:

  75.         set depth

  76.         goto end

  77.         ) else (

  78.         echo test.bat not found.

  79.         goto end

  80.         )

  81. :helpMsg

  82. echo Usage: main foldername

  83. :end

  84. set main=

  85. popd</span>

  86. test.bat:

  87. <span style="color: #FF0000;">@echo off

  88. if (%main%) == () goto helpMsg else (

  89. :loop

  90.         if exist %1 (

  91.                 cd %1

  92.                 set /a depth=depth+1

  93.                 set depth

  94.                 copy ..\test.bat . >nul

  95.                 test.bat %1

  96.                 ) else (

  97.                 mkdir %1

  98.                 if errorlevel 1 goto end

  99.                 cd %1

  100.                 set /a depth=depth+1

  101.                 set depth

  102.                 copy ..\test.bat . >nul

  103.                 test.bat %1

  104.                 )

  105.         )

  106. goto loop

  107. :helpMsg

  108. echo Usage: main foldername

  109. :end</span>
复制代码
发表于 2012-11-24 17:05:26 | 显示全部楼层   广东省广州市
好深奥!!!!!!!
回复 支持 反对

使用道具 举报

结帖率:33% (3/9)
 楼主| 发表于 2012-11-24 15:40:36 | 显示全部楼层   四川省成都市
Windows系统(中文)是双字节系统
250 就是 250字,不可以认为是500字节。或者说无论中文还是英文都是500字节

回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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