返回列表 发帖
本帖最后由 apang 于 2015-1-10 14:51 编辑

如果回显结果正确,删除第3行的 echo
@set @n=0;/* & echo off
for /f "tokens=1*" %%a in ('dir /b^|cscript -nologo -e:jscript "%~0"') do (
        echo,Del "%%b"
)
pause & exit/b & rem */
dic = new ActiveXObject("Scripting.Dictionary");
while (!WScript.StdIn.AtEndOfStream) {
        f = WScript.StdIn.ReadLine();
        m = f.match(/.+\.(.+?)\.(\d+)$/);
        if (m) {
                k = m[1].toLowerCase();
                m[2] = ("0000000000" + m[2]).substr(m[2].length);
                if (dic.Exists(k)) {
                        dic.Item(k) += "\n" + m[2] + " " + m[0];
                } else dic.Add(k, m[2] + " " + m[0])
        }
}
arr = (new VBArray(dic.Keys())).toArray();
for (i=0; i<arr.length; i++) {
        a = dic(arr[i]).split("\n").sort().slice(0, -1);
        WScript.Echo(a.join("\n"))
}COPY

TOP

本帖最后由 apang 于 2015-1-10 16:39 编辑

回复 22# awei


    试试:
@set @n=0;/* & echo off
set "Js=cscript -nologo -e:jscript"
pushd "D:\Test\"
for /f "tokens=1*" %%a in ('dir /a-d /b /s ^| %Js% "%~0"') do (
        echo,Del "%%b"
)
pause & exit/b & rem */
dic = new ActiveXObject("Scripting.Dictionary");
while (!WScript.StdIn.AtEndOfStream) {
        f = WScript.StdIn.ReadLine();
        m = f.match(/(.+\..+?)\.(\d+)$/);
        if (m) {
                k = (m[1]).toLowerCase();
                m[2] = ("000000000000" + m[2]).substr(m[2].length);
                if (dic.Exists(k)) {
                        dic.Item(k) += "\n" + m[2] + " " + m[0];
                } else dic.Add(k, m[2] + " " + m[0])
        }
}
arr = (new VBArray(dic.Keys())).toArray();
for (i=0; i<arr.length; i++) {
        a = dic(arr[i]).split("\n");
        if (a.length > 1) {
                WScript.Echo(a.sort().slice(0, -1).join("\n"))
        }
}COPY
1

评分人数

TOP

回复 24# awei


    第3行路径改成实际路径

TOP

回复 26# awei


    显示结果正确不?
正确的话,删掉多余的echo, 再次运行即可

TOP

回复 28# awei


    Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利

C:\Windows\System32>cd /d D:\Test\

D:\Test>dir /b/s | findstr \.[0-9][0-9]*$
D:\Test\new.JPG.1
D:\Test\new.doc.11
D:\Test\file2.txt.12
D:\Test\new.doc.100
D:\Test\new.jpg.21
D:\Test\file2.txt.2
D:\Test\new.jpg.25
D:\Test\b.txt.1
D:\Test\abc\NEW.JPG.1
D:\Test\abc\new.DOC.1
D:\Test\abc\new.jpg.99
D:\Test\abc\new.doc.100
D:\Test\abc\new.jpg.10

D:\Test>Test.bat
Del "D:\Test\new.JPG.1"
Del "D:\Test\new.jpg.21"
Del "D:\Test\new.doc.11"
Del "D:\Test\file2.txt.2"
Del "D:\Test\abc\NEW.JPG.1"
Del "D:\Test\abc\new.jpg.10"
Del "D:\Test\abc\new.DOC.1"
请按任意键继续. . .


亲测,处理子文件夹没有问题

TOP

其实,17楼 xxpinqz 的思路非常不错,只是楼主不识货。
小改一下 :
@echo off & setlocal enabledelayedexpansion
pushd "D:\test\"
if "%1" == "OK" (
    for /f "delims=" %%a in ('dir /b/s^|findstr \.[0-9][0-9]*$') do (
        set "str=0000000000%%~xa"
        set "str=!str:.=!"
        echo,%%~dpna/!str:~-10!%%~xa
    )
) else (
    for /f "tokens=1*delims=/" %%a in ('"%~0" OK^|sort /r') do (
        if /i "%%a" == "!file!" (
            echo Del "%%a%%~xb"
        ) else set "file=%%a"
    )
    pause
)COPY

TOP

返回列表