字数统计——批量

字数统计——批量

我想制作一个批处理脚本,计算单词“parent”在文件中出现的次数,

http://api.github.com/repos/godzillamesel/disclovestory/commits

我目前正在使用以下命令下载此文件:

cd "$env:programfiles\DiscLovestory\sys\update" 
Remove-Item "git_commit.log" 
[Net.ServicePointManager]::SecurityProtocol =  tls12, tls11, tls" 
wget -O git_commit.log http://api.github.com/repos/godzillamesel/disclovestory/commits 
pause

拥有这个文件也是需要作为对用户的“更新说明”的。这个脚本直接进入 powershell,因为我不知道 bitsadmin 是如何工作的,但如果你也知道它应该如何工作,请随意帮助我!因为我的脚本是基于批处理脚本的。

我希望输出到:"%programfiles%\DiscLovestory\sys\update\version.log"并且也到注册表中:

REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DiscLovestory" /v DisplayVersion /t REG_SZ /d

在两个输出位置,只需输入如下版本即可:“x.xx”,不带引号。

如果你想跟进该脚本,或者使用它,请随意。它是开源的,网址为:https://github.com/godzillamesel/disclovestory

答案1

你可以尝试这个:

@echo off
set /a COUNT=0
for /f %%i in ('findstr /i /c:"parent" commits.txt') do (
  set /a COUNT=COUNT + 1
)
echo "parent" words count: %COUNT% 
pause

参考文献:如何在 MS DOS 中获取批处理文件中的字数并操作退出循环

答案2

我们终于搞明白了。我们使用了我朋友编写的 C 语言脚本。这不是我所寻找的,但它确实有效。`

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINESZ 1024

int main(int argc, char **argv)
{
    if(argc < 3){
        printf("Usage: count.exe <stack> <needle>\n");
        exit(0);
    }
    char* stack = argv[1];
    char* needle = argv[2];
    int count = 0;
    char buff[LINESZ];
    FILE *fin = fopen (stack, "r");
    if (fin != NULL) {
        while (fgets (buff, LINESZ, fin)) {
            if(strstr(buff,needle)){
                count += 1;
            }
        }
        fclose (fin);
    }
    printf("%d\n",count);
}

它被编译为https://github.com/godzillamesel/disclovestory/blob/master/scripts/sys/update/count.exe如果你需要它。count.exe

相关内容