找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30287|回复: 8

[文本处理] [已解决]批处理如何以资源管理器的文件名递增的排序规则列出指定扩展名/后缀的文件?

[复制链接]
发表于 2016-5-30 19:45: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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2016-5-30 20:32:34 | 显示全部楼层
回复 1# kaze
  1. dir /b *.txt | sort
复制代码
发表于 2016-5-30 20:36:18 | 显示全部楼层
本帖最后由 pcl_test 于 2017-4-21 23:42 编辑
  1. /*&cls
  2. @echo off
  3. set "netpath=%systemroot%\Microsoft.NET\Framework"
  4. for /f "delims=" %%a in ('dir /ad /b "%netpath%\v?.*"') do (
  5.     if exist "%netpath%\%%a\csc.exe" (
  6.         set "cscpath=%netpath%\%%a\csc.exe"
  7.         goto :0
  8.     )
  9. )
  10. echo;未安装.Net Framework 2.0及其上版本组件或相关程序丢失&pause&exit
  11. :0
  12. "%cscpath%" /out:"%tmp%\$Expdir.exe" "%~f0"
  13. dir /a-d /b /s *-1.txt|%tmp%\$Expdir.exe
  14. pause&exit
  15. */
  16. using System;
  17. using System.IO;
  18. using System.Collections;
  19. using System.Runtime.InteropServices;
  20. class Expdir
  21. {
  22.     [DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
  23.     private static extern int StrCmpLogicalW(string psz1, string psz2);
  24.     static void Main(string[] args)
  25.     {
  26.         ArrayList files = new ArrayList();
  27.         String f;
  28.         while((f=Console.ReadLine())!=null)
  29.         {
  30.             files.Add(Path.GetFileName(f));
  31.         }
  32.         string[] fs = (string[])files.ToArray(typeof(string));
  33.         Array.Sort(fs, StrCmpLogicalW);
  34.         foreach (string file in fs)
  35.         {
  36.             Console.WriteLine(file);
  37.         }
  38.     }
  39. }
复制代码

评分

参与人数 2技术 +2 收起 理由
kaze + 1 乐于助人
codegay + 1 1

查看全部评分

 楼主| 发表于 2016-5-31 15:20:39 | 显示全部楼层
回复 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:
命名空间并不直接包含诸如字段或方法之类的成员
发表于 2016-5-31 16:00:21 | 显示全部楼层
回复 5# kaze


>"%tmp%\$" more +16 "%~f0"
你增加了代码之后这个数字也要增加

评分

参与人数 1技术 +1 收起 理由
kaze + 1 乐于助人

查看全部评分

 楼主| 发表于 2016-5-31 16:32:06 | 显示全部楼层
回复 6# gawk


    谢谢,不过搜索子目录的文件  代码怎么改呢?
 楼主| 发表于 2016-6-1 12:29:47 | 显示全部楼层
回复 3# pcl_test

你好大神,谢谢,不过 如果用 for /r %%a in (*-1.txt) do echo %%~nxa>>2016.txt 生成的文件名称列表,怎么使用该代码进行修改呢?
就是搜索包含当前目录和子目录的文件,以windows资源管理器的文件名递增的排序规则,  代码怎么改呢?
发表于 2016-6-6 23:01:10 | 显示全部楼层
回复 7# kaze

3楼已改
 楼主| 发表于 2016-6-7 17:48:45 | 显示全部楼层
回复 8# pcl_test


    谢谢大神的支持 .^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 18:22 , Processed in 0.021996 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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