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

[文件操作] 批处理怎样按排名上升幅度 排列列表

按排名上升幅度 由多到少 重新排列列表

现有 两个列表   
以前的排名表old    现在的排名表new
要把new 表里面的域名 按排名上升幅度 由大到小 排列


大概是这样实现吧
遍历 现在的排名表new里的 域名列
查找该域名是否在以前的排名表old 中有排名  
若有 则 以前名次减现在名次  得出上升幅度   
若无 则 用以前列表总数 减 现在的名次  得出上升幅度


然后按上升幅度 大小排列new里面所有域名
做个bat一键生成新的列表
不要哭让萤火虫带着你逃跑 乡间的歌谣永远的依靠

本帖最后由 ivor 于 2017-7-20 21:02 编辑
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. for /f "tokens=1,2 delims=," %%a in (new.csv) do (
  3. :one
  4. for /f "tokens=1,2 delims=," %%i in ('findstr /E "%%b" old.csv ^|^| echo false') do (
  5. if "%%i" equ "false" (
  6. for /f %%x in ('type old.csv ^| find /i "," /c') do (
  7. set /a ranking=%%x-%%a
  8. echo !ranking!,%%b
  9. rem >>rank.csv echo !ranking!,%%b
  10. )
  11. ) else (
  12. set /a ranking=%%i-%%a
  13. echo !ranking!,%%b
  14. rem >>rank.csv echo !ranking!,%%b
  15. )
  16. )
  17. )
  18. pause
复制代码
2

评分人数

#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

本帖最后由 uuu888s 于 2017-7-20 21:36 编辑

回复 2# ivor


147        tmall.com
387        tmall.com
390        tmall.com
395        tmall.com
703        tmall.com


出现这样的情况  域名部分相同 也算一个域名了  这样肯定不行
不要哭让萤火虫带着你逃跑 乡间的歌谣永远的依靠

TOP

回复 2# ivor


-5        tumblr.com
325        tumblr.com

有二级域名的情况    所以要域名字符串完全一样 才算该域名
不要哭让萤火虫带着你逃跑 乡间的歌谣永远的依靠

TOP

  1. for /f "tokens=1,2 delims=," %%i in ('findstr /E ",%%b" old.csv ^|^| echo false') do (
复制代码
关于二级域名的问题,这一行%%b前面加个,就能解决

没生成文件是因为我注释了两行,前面带有REM
1

评分人数

#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

ps
  1. $old=@{};$new=@();$n=0;
  2. gc 'D:\test\old.csv'|%{$a=$_.split(',');$old[$a[1].trim().toLower()]=$a[0];$n++}
  3. gc 'D:\test\new.csv'|%{
  4.     $b=$_.split(',');
  5.     $c=$b[1].trim().toLower();
  6.     if($old[$c]){
  7.        $new+=$($old[$c]-$b[0]).toString()+','+$c;
  8.     }else{
  9.        $new+=$($n-$b[0]).toString()+','+$c;
  10.     }
  11. }
  12. $new|sort {[int]$_.split(',')[0]} -des
复制代码
1

评分人数

TOP

回复 6# qazplm


    不是bat vbs  这是 什么文件执行的呢
不要哭让萤火虫带着你逃跑 乡间的歌谣永远的依靠

TOP

本帖最后由 523066680 于 2017-7-22 16:13 编辑

Perl / 蜜汁语法糖
      use IO::Handle;
      STDOUT->autoflush(1);

      use File::Slurp;

      my $old = read_file("old.csv");
      my $new = read_file("new.csv");

      my %old = map { reverse split(",", $_) } split(/\r?\n/, $old);
      my %new = map { reverse split(",", $_) } split(/\r?\n/, $new);

      my %delta = map {  $_, $new{$_} - $old{$_}  } keys %new;

      grep
      {
          printf "%5d %s\n", $delta{$_}, $_
      }
      reverse sort { $delta{$a} <=> $delta{$b} } (keys %delta);
[Finished in 0.3s]

部分
  1. 1049 jumia.com.ng
  2. 1048 yjc.ir
  3. 1047 nextdoor.com
  4. 1045 mileroticos.com
  5. 1037 cdninstagram.com
  6. 1036 imagetwist.com
  7. 1035 rightmove.co.uk
  8. ...
  9. ...
  10. -519 office365.com
  11. -524 rednet.cn
  12. -536 jrj.com.cn
  13. -600 patreon.com
  14. -610 redd.it
  15. -646 rumble.com
  16. -691 list.tmall.com
复制代码
1

评分人数

TOP

回复 7# uuu888s
powershell
1

评分人数

TOP

回复 8# 523066680


    能把成品给我打包下吗  感谢!  之前的解答 速度很慢  看你这个好像很快!
但是不知道perl 语言怎么写 蜜汁没听过
不要哭让萤火虫带着你逃跑 乡间的歌谣永远的依靠

TOP

回复 6# qazplm


   xp上安装了ps      把你的代码保存为ps1 文件 运行 出现很多红色文字  好像不行  能打包一下给我吗
不要哭让萤火虫带着你逃跑 乡间的歌谣永远的依靠

TOP

返回列表