编辑与用户的建议:
我有我的数千台服务器上运行,从日志编译关键字和输出有多少次出现在文本文件中的脚本。 输出看起来像这样为每个单独的服务器:
---------- C:\TEMP\TEXT.001: 0
---------- C:\TEMP\TEXT.002: 0
---------- C:\TEMP\TEXT.003: 2
---------- C:\TEMP\TEXT.004: 0
---------- C:\TEMP\TEXT.005: 1
冒号后的最后一个数字的次数的关键字出现在日志文件中。 所以,我有从上千台服务器,我然后利用XCOPY移动到我的盒子放到同一个文件夹的结果文件。
将文件移动到我的盒子之后,我有一个脚本,冒号后删除所有数据,然后找到的总和。 它的工作原理,在一定程度上,但它仅适用于单个文件:
@Echo off
set "Total=0"
for /f "tokens=3 delims=:" %%a in (Server1_Count.txt) do Set /a "Total+=%%a"
(echo %%a >> Server1_CountCompleted.txt Total is %Total%)
我有我挣扎了两个问题:
- 我需要创建一个循环,它会击中* __ Count.txt结尾的文件夹内的所有文件,然后创建的* _CountCompleted.txt所有文件与不同的主机名开始一个新的输出,我一直在尝试使用通配符无济于事。 (即:server1_Count.txt,server2_count.txt然后应该生成server1_CountCompleted.txt,server2_CountCompleted)
- 我此脚本的电流输出只能定向到一个文件,并生成一个新文件,看起来象下面这样:
%的总是34
有没有一种方法来添加主机名(开头的文件名前缀),以显示在新生成的文件,一个例子:
server1的合计为34
当只使用set /a
没有呼叫或延迟扩展neccessary。
提示:使用文件夹/文件可能包含空格的名称打交道时更好地利用结肠delims。
:: Q:\Test\2019\04\01\SO_55461444.cmd
@Echo off
set "Total=0"
for /f "tokens=3 delims=:" %%a in (FILE.txt) do Set /a "Total+=%%a"
echo Total is %Total%
pause
示例输出(德文场所):
> SO_55461444.cmd
Total is 3
Drücken Sie eine beliebige Taste . . .
新变种迭代文件*_count.txt
指定文件夹中:
:: Q:\Test\2019\04\01\SO_55461444.cmd
@Echo off & SetLocal
:: clear/initialize env vars
set "Total=0"
for /F "delims==" %%A in ('set FileTotal[ 2^>nul') Do Set "%%A="
Pushd "X:\path\Folder" || (Echo couldn't change to folder &Pause&exit /b 1)
Echo Processing folder %CD%
Echo:
:: iterate files in folder
For %%F in (*_count.txt) Do (
for /f "tokens=3 delims=:" %%A in (
'Findstr "^-------" "%%F"'
) Do Set /A "FileTotal[%%~nF]+=%%A,Total+=%%A"
)
Set FileTotal[
Echo ===================
echo GrandTotal is %Total%
popd
pause
输出样本:
> Q:\Test\2019\04\01\SO_55461444.cmd
Processing folder Q:\Test\2019\04\02
FileTotal[server1_count]=3
FileTotal[server2_count]=15
===================
GrandTotal is 18
Drücken Sie eine beliebige Taste . . .
文章来源: Parsing multiple text files with alternate file names, finding sum, and then compiling output with Batch file