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

[文件操作] 批处理搜索D盘txt后再按文件名顺序排序怎样忽略文件夹顺序?

搜索D盘*.txt后再按文件名顺序(怎样忽略文件夹顺序呀)
搜索*.txt后再按文件名顺序(忽略文件夹顺序)排序写入完整路径到1.txt
怎样忽略文件夹顺序呀
例如D盘有
D:\b.txt
D:\d.txt
D:\1\c.txt
D:\1\f.txt
D:\2\1\a.txt
D:\2\1\g.txt
D:\2\1\1\e.txt
则1.txt如下
D:\2\1\a.txt
D:\b.txt
D:\1\c.txt
D:\d.txt
D:\2\1\1\e.txt
D:\1\f.txt
D:\2\1\g.txt

  1. @echo off
  2. (for /r %%a in (*.txt) do @echo %%~na.%%~xa) |sort
  3. pause
复制代码

TOP

  发现CN-DOS的PPdos写了一段比较简洁的代码,但是结果是用短文件名,并且还带有多余的信息(没有把参与排序用的文件名过滤调),如果把那段代码放在其他路径下执行时,还会把当前路径信息写入结果。我就把他的代码完善一下吧,下面的代码能兼容路径带英文感叹号的情况,还能查找影藏的txt文件,缺点是生成了临时文件:
  1. @echo off
  2. cd.>e:\tmp.txt
  3. for /f "delims=" %%i in ('dir /a-d /b /s d:\*.txt 2^>nul') do (
  4.     setlocal enabledelayedexpansion
  5.     set "str=%%~nxi|%%i"
  6.     echo !str!>>e:\tmp.txt
  7.     endlocal
  8. )
  9. cd.>e:\list.txt
  10. for /f "delims=| tokens=1*" %%i in ('sort e:\tmp.txt') do (
  11.     setlocal enabledelayedexpansion
  12.     set "str=%%j"
  13.     echo !str!>>e:\list.txt
  14.     endlocal
  15. )
  16. del /q e:\tmp.txt
  17. start e:\list.txt
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

暂时只想到个生成临时文件的办法

  1. @echo off
  2. for /f "delims=" %%i in ('dir /s /a-d /b d:\*.txt') do echo %%~nxi>>temp1.txt&echo %%i>>temp2.txt
  3. for /f "delims=" %%i in ('type temp1.txt^|sort') do findstr "%%i" temp2.txt>>1.txt
  4. del /q temp*.txt&start 1.txt
复制代码

[ 本帖最后由 zw19750516 于 2008-6-20 03:11 编辑 ]
***共同提高***

TOP

返回列表