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

[文件操作] [已解决]根据文件夹中文件判断缺失情况对应输出?

本帖最后由 czvde 于 2022-5-30 11:07 编辑

文件夹文件如下:
0123ABCD___1.doc
0123ABCD___3.doc
ABC123___002.doc
ABC123___003.doc


效果:
0123ABCD___1.doc
0123ABCD___3.doc
ABC123___002.doc
ABC123___013.doc
aaa.txt

aaa.txt
0123ABCD___2
ABC123___001

已解决!

本帖最后由 flashercs 于 2022-5-30 10:23 编辑
  1. <#*,:&cls
  2. @echo off
  3. cd /d "%~dp0"
  4. powershell -C "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~f0\" -ReadCount 0 | Out-String)))"
  5. pause
  6. exit /b
  7. #>
  8. $beginNumber = 1
  9. Add-Type -TypeDefinition @'
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Runtime.InteropServices;
  13. namespace MyCode
  14. {
  15.   public class ExplorerViewComparer : Comparer<string>
  16.   {
  17.     [DllImport("Shlwapi.dll", EntryPoint = "StrCmpLogical", CharSet = CharSet.Auto)]
  18.     internal static extern int StrCmpLogical(string p1, string p2);
  19.    
  20.     public override int Compare(string x, string y)
  21.     {
  22.       return StrCmpLogical(x, y);
  23.     }
  24.   }
  25. }
  26. '@
  27. $ExpComp = New-Object MyCode.ExplorerViewComparer
  28. [system.collections.arraylist]$alfiles= @(Get-ChildItem -Path .\*_* | Where-Object { -not $_.PSIsContainer } | ForEach-Object { $_.Name })
  29. [void]$alfiles.Sort($ExpComp)
  30. $alfiles | Select-Object -Property @{
  31.   Name       = 'prefix'
  32.   Expression = {
  33.     if ($_ -match '^([^_]*_+)(\d+)') {
  34.       $script:m = $Matches
  35.       $script:m[1]
  36.     } else {
  37.       $Script:m = $null
  38.       ""
  39.     }
  40.   }
  41. }, @{
  42.   Name       = 'suffix'
  43.   Expression = { if ($Script:m) { $Script:m[2] } }
  44. }, @{
  45.   Name       = 'number'
  46.   Expression = { if ($Script:m) { $Script:m[2] -as [int] } }
  47. } | Group-Object -Property prefix | ForEach-Object {
  48.   if ($_.Name -ne "") {
  49.     $arrnumbers = @($_.Group | ForEach-Object { $_.number })
  50.     $numberLength = $_.Group[0].suffix.Length
  51.     for ($i = $beginNumber; $i -le $arrnumbers[-1]; $i++) {
  52.       if ($arrnumbers -notcontains $i) {
  53.         $_.Name + $i.ToString().PadLeft($numberLength, '0')
  54.       }
  55.     }
  56.   }
  57. } | Set-Content -LiteralPath .\aaa.txt
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

本帖最后由 czvde 于 2022-5-30 10:42 编辑

回复 2# flashercs
    谢谢

TOP

返回列表