[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
这代码有点不严谨
首先,文件名含空格是无法用%~s1解决的,因为 %~s1 的意思是“扩展的路径只含有短名”,它只针对路径,与文件名没有关系。所以应把 in ('"%~0" %~s1 OK^|sort') do 中的 %~s1 改为 %1
其次,for /f %%i in (%1) do 这一句没有考虑到当 %1 被双引号括起来时将被理解为是字符串。所以应该使用 for /f useback %%i in ("%~1") do
另外,代码核心思路上也有问题,没有考虑到当 !Res! 超过 9 时将出现错误的排序,比如 1234567890 大于 20(10 位的数字排在 2 位数字之前)
其实类似的题目,一般都是用补位排序解决的,简单有效

TOP

回复 3# ivor


    嗯

TOP

回复 6# keiamy


    我想我知道原因了,错误应该源于 "%~0" %~s1 OK,这里用 "%~0" 也是一个不严谨之处,in (' ') do 中的内容是传递给 cmd /c 执行的,for 再对这个 cmd 的输出进行解析,但是 cmd /c 有个特性,当其参数以 " 打头时,将会脱引号。
    比如 cmd /c "aasd cxv" 123 这句会被解释成 cmd /c aasd cxv" 123,所以会出错。
    解决方案有很多,只要不让双引号打头就行了,比如可以把 "%~0" 写成 @%0,或者 ;%0,再或者 %~sdp0"%~nx0"

TOP

返回列表