标题: [文本处理] [已解决]批处理如何以资源管理器的文件名递增的排序规则列出指定扩展名/后缀的文件? [打印本页]
作者: kaze 时间: 2016-5-30 19:45 标题: [已解决]批处理如何以资源管理器的文件名递增的排序规则列出指定扩展名/后缀的文件?
本帖最后由 kaze 于 2016-6-7 17:47 编辑
现有文件
A-a3-wallet-ad65-1.txt
A-a3-wallet-ag2-1.txt
A-a3-wallet-ag17-1.txt
A-a3-wallet-ag18-1.txt
A-a3-wallet-ag117-1.txt
A-a3-wallet-butterfly-1.txt
A-a3-gx-wallet-flo-22-1.txt
A-a3-gx-wallet-flo-282-1.txt
A-a3-gx-wallet-flo-zebra-1.txt
要求生成文件列表排序
正确排序
A-a3-gx-wallet-flo-22
A-a3-gx-wallet-flo-282
A-a3-gx-wallet-flo-zebra
A-a3-wallet-ad65
A-a3-wallet-ag2
A-a3-wallet-ag17
A-a3-wallet-ag18
A-a3-wallet-ag117
A-a3-wallet-butterfly
不能直接使用dir或以下脚本,因为排序不合要求
for /r %%a in (*-1.txt) do echo %%~nxa>>2016.txt
弄了好久,我水平有限,解决不了,希望有大侠帮忙解决,谢谢啦!!
附一个创建脚本,方便大家测试:
cd.>A-a3-wallet-ad65-1.txt
cd.>A-a3-wallet-ag2-1.txt
cd.>A-a3-wallet-ag17-1.txt
cd.>A-a3-wallet-ag18-1.txt
cd.>A-a3-wallet-ag117-1.txt
cd.>A-a3-wallet-butterfly-1.txt
cd.>A-a3-gx-wallet-flo-22-1.txt
cd.>A-a3-gx-wallet-flo-282-1.txt
cd.>A-a3-gx-wallet-flo-zebra-1.txt
作者: ivor 时间: 2016-5-30 20:32
回复 1# kaze 复制代码
作者: pcl_test 时间: 2016-5-30 20:36
本帖最后由 pcl_test 于 2017-4-21 23:42 编辑
- /*&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 /s *-1.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);
- }
- }
- }
复制代码
作者: kaze 时间: 2016-5-31 15:20
回复 3# pcl_test
你好!很厉害啊,使用的通用方法。
本意是用来提取当前目录及子目录的*-1.txt文件名进行windows排序
我在14行加入语句去掉-1.txt后缀
for /f "delims=" %%i in (2016.txt) do (
set "_word=%%i"
call,set _word=%%_word:-1.txt=%%
call,echo/%%_word%%
)>>2016t2.txt
为什么会有提示错误呢?而且无法搜索子目录的*-1.txt文件。
c:\Users\Admin\AppData\Local\Temp\$(1,9): error CS0116:
命名空间并不直接包含诸如字段或方法之类的成员
作者: gawk 时间: 2016-5-31 16:00
回复 5# kaze
>"%tmp%\$" more +16 "%~f0"
你增加了代码之后这个数字也要增加
作者: kaze 时间: 2016-5-31 16:32
回复 6# gawk
谢谢,不过搜索子目录的文件 代码怎么改呢?
作者: kaze 时间: 2016-6-1 12:29
回复 3# pcl_test
你好大神,谢谢,不过 如果用 for /r %%a in (*-1.txt) do echo %%~nxa>>2016.txt 生成的文件名称列表,怎么使用该代码进行修改呢?
就是搜索包含当前目录和子目录的文件,以windows资源管理器的文件名递增的排序规则, 代码怎么改呢?
作者: pcl_test 时间: 2016-6-6 23:01
回复 7# kaze
3楼已改
作者: kaze 时间: 2016-6-7 17:48
回复 8# pcl_test
谢谢大神的支持 .^_^
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |