标题: [文本处理] [已解决]批处理dir+sort如何实现按资源管理器的文件名递增的排序列出文件? [打印本页]
作者: lateol 时间: 2013-7-9 10:13 标题: [已解决]批处理dir+sort如何实现按资源管理器的文件名递增的排序列出文件?
本帖最后由 pcl_test 于 2016-7-12 17:20 编辑
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d *.*') do (
- echo %%i>>"dkdh.lat"
- )
- >$.t sort <"dkdh.lat" 2>nul
- move $.t "123.txt" 2>nul
- pause
复制代码
获取当前目录下的 txt
为啥是这个样的?
W1-D12.txt
W10-R1.txt
W11-R0.5.txt
W12-D10.txt
W2-D10.txt
W3-D6.txt
W4-D12.txt
W5-D3.txt
W6-R3.txt
W7-D6R0.5.txt
W8-D4R0.5.txt
W9-R2.txt
想要给他排成,看了这个命令的说明,好像没有对这一个的详细解说啊。还有其他的用法吗?
W1-D12.txt
W2-D10.txt
W3-D6.txt
W4-D12.txt
W5-D3.txt
W6-R3.txt
W7-D6R0.5.txt
W8-D4R0.5.txt
W9-R2.txt
W10-R1.txt
W11-R0.5.txt
W12-D10.txt
作者: xxpinqz 时间: 2013-7-9 10:32
- @echo off&setlocal enabledelayedexpansion
- %1 (for /f "tokens=1*" %%a in ('%0 :^|sort') do echo %%b)>>"dkdh.lat"&exit /b
- for /f "tokens=1* delims=W-" %%i in ('dir /b /a-d *.txt') do (
- set n=00000%%i
- echo !n:~-5! W%%i-%%j
- )
复制代码
作者: lateol 时间: 2013-7-9 10:44
回复 2# xxpinqz
运行没反应?
作者: terse 时间: 2013-7-9 12:52
本帖最后由 terse 于 2013-7-9 12:55 编辑
dkdh.lat 内容没变化吗
这里是否最好这样呢 dir /b /a-d w*.txt
作者: lateol 时间: 2013-7-9 15:47
回复 4# terse
麻烦贴一段完整代码 谢谢!
作者: Python 时间: 2013-7-9 16:06
回复 5# lateol
他的意思是,你自己在*.txt前加个w就行了。
作者: xxpinqz 时间: 2013-7-9 18:59
回复 4# terse
多谢提醒。。
回复 3# lateol
你是不是插到其他代码内,改成下面的看看,只针对W开头文本- @echo off&setlocal enabledelayedexpansion
- (for /f "tokens=1* delims=W-" %%i in ('dir /b /a-d W*.txt') do (
- set n=00000%%i
- echo !n:~-5! W%%i-%%j
- ))>tmp
- (for /f "tokens=1*" %%a in ('sort tmp') do echo %%b)>>"dkdh.lat"
- del tmp
复制代码
作者: lateol 时间: 2013-7-9 20:56
回复 7# xxpinqz
有没有通用性一点的呢??
作者: terse 时间: 2013-7-9 21:57
要通用的难点在 文件名没规律 怎么个通用
至少要知道你文件名的组成规律 因为你顶楼给出范例 没看出还有其他变化
作者: lateol 时间: 2013-7-9 23:17
本帖最后由 lateol 于 2013-7-9 23:19 编辑
回复 9# terse
通常 xxx-xxxxx-G.txt 是这样的 前面为[A-Z][1-99]-文件名-G.txt
作者: terse 时间: 2013-7-10 00:00
也不统用 仅仅针对你所描述的文件名情况
首字符为1个非数字 后面两位数字(因为你说1-99) 这样的组合
代码根据首字符和紧跟后面一位或两位数字进行排序
文件不是很多可以试下- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1* delims=-" %%i in ('dir /b /a-d *-*-G.txt') do (
- set str=%%i
- if !str:~1! lss 10 set "str=!str:~,1!0!str:~1!"
- set "$!str!=%%i-%%j"
- set "var=!var! !str!"
- )
- for /f %%i in ('"(for %%j in (!var!) do @echo %%j)|sort"') do echo !$%%i!
- pause
复制代码
作者: xxpinqz 时间: 2013-7-10 18:11
回复 terse
通常 xxx-xxxxx-G.txt 是这样的 前面为[A-Z][1-99]-文件名-G.txt
最好也说明下1-99有没可能重复。
作者: wskwfkbdn 时间: 2013-7-13 23:58
本帖最后由 wskwfkbdn 于 2013-7-14 00:03 编辑
sort -n -k 2 -t W 1.txt
1: sort的-n选项
你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。
我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”!
2:sort提供了-t选项,后面可以设定间隔符,指定了间隔符之后,就可以用-k来指定列数了
结果相当满意:
W1-D12.txt
W2-D10.txt
W3-D6.txt
W4-D12.txt
W5-D3.txt
W6-R3.txt
W7-D6R0.5.txt
W8-D4R0.5.txt
W9-R2.txt
W10-R1.txt
W11-R0.5.txt
W12-D10.txt
作者: lateol 时间: 2013-7-14 14:41
回复 13# wskwfkbdn
感谢 您的详解帮助,请帖出你的代码 这样我比较容易理解谢谢。
作者: wskwfkbdn 时间: 2013-7-14 15:30
本帖最后由 wskwfkbdn 于 2013-7-14 17:41 编辑
回复 14# lateol
修改补充:
@echo off
dir /b /a-d *.txt |sort -n -k 2 -t W
pause
作者: xxpinqz 时间: 2013-7-14 15:41
这个sort是第三方工具吧。
作者: pcl_test 时间: 2016-7-12 17:29
- /*&cls
- @echo off
- set "netpath=%systemroot%\Microsoft.NET\Framework"
- for /f "delims=" %%a in ('dir /ad /b "%netpath%\v?.*"') do (
- if exist "%netpath%\%%a\csc.exe" (
- set "cscpath=%netpath%\%%a\csc.exe"
- goto :0
- )
- )
- echo;未安装.Net Framework 2.0及其上版本组件或相关程序丢失&pause&exit
- :0
- "%cscpath%" /out:"%tmp%\$Expdir.exe" "%~f0"
- dir /a-d /b *.txt|%tmp%\$Expdir.exe
- pause&exit
- */
- using System;
- using System.IO;
- using System.Collections;
- using System.Runtime.InteropServices;
- class Expdir
- {
- [DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
- private static extern int StrCmpLogicalW(string psz1, string psz2);
- static void Main(string[] args)
- {
- ArrayList files = new ArrayList();
- String f;
- while((f=Console.ReadLine())!=null)
- {
- files.Add(Path.GetFileName(f));
- }
- string[] fs = (string[])files.ToArray(typeof(string));
- Array.Sort(fs, StrCmpLogicalW);
- foreach (string file in fs)
- {
- Console.WriteLine(file);
- }
- }
- }
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |