1

私はテキストファイル形式を持っています

2013-08-13 17:12:39 3868 0 status: Starting upload of U:\AOT\KPT_BU\

2013-08-13 17:12:39 3868 0 status: Starting upload of U:\AOT\KPT_BU\

2013-09-13 17:12:39 3868 0 status: Starting upload of U:\AOT\KPT_BU\

2013-09-13 17:12:39 3868 0 status: Starting upload of U:\AOT\KPT_BU\

2013-08-13 17:12:39 3868 0 status: Starting upload of U:\AOT\KPS\

2013-08-13 17:12:39 3868 0 status: Starting upload of U:\AOT\KPS\

2013-08-13 17:12:39 3868 0 status: Starting upload of U:\AOT\KPS\

2013-09-13 17:12:39 3868 0 status: Starting upload of U:\AOT\KPS\

2013-09-13 17:12:39 3868 0 status: Starting upload of U:\AOT\KPS\

2013-09-13 17:12:39 3868 0 status: Starting upload of U:\AOT\KPS\

2013-09-13 17:12:39 3868 0 status: Starting upload of U:\AOT\KPS\

出力ファイル形式が欲しい

date 2013-08-13 KPT_BU total = 2

date 2013-08-13 KPS Total = 3

date 2013-09-13 KPT_BU total = 2

date 2013-09-13 KPS total = 4
4

2 に答える 2

0

次のことを達成したいと思います: 各日付の指定されたフォルダーへのアップロードをカウントしたい。

私のソリューションは、日付とパス名の組み合わせごとに環境変数を作成し、その変数にカウンターを入れます。ENABLEDELAYEDEXPANSION に大きく依存しており、'for' コンストラクトで代替 call/%% を使用できないため、それなしでは解決策を考えられません。誰かがこれに対する解決策を知っているなら、私はこれを知ることができてとてもうれしいです. したがって、このソリューションは「!」を含むパスでは機能しません。スクリプトは環境変数の作成に依存しているため、環境メモリが不足すると停止します。

@echo off
setlocal ENABLEDELAYEDEXPANSION
:: remove all variabel starting with $ they will be restored after 'endlocal'
for /f "tokens=1 delims==" %%# in ('set $') do set "%%#="
:: create an environment variable from the date and path and increase its
:: value for every match
for /f "delims=" %%# in (testfile.txt) do (
    :: get first and last token ($1=date and $2=path) from line
    set "$1="
    for %%A in (%%#) do set $1>nul 2>nul||set "$1=%%A" & set "$2=%%A"
    :: get last part of path from $2 (mask '\' with '" "' to use in for
    set "$2="!$2:\=" "!
    for %%A in (!$2!) do set $2=%%~A
    :: generate envvar '-' must be removed, because set/a gets confused by '-'
    set "_=$!$1:-=!!$2!"
    :: counting in created vars
    if defined !_! ( set /a "!_!+=1" ) else ( set "!_!=1" ) 
)
set "$1=" & set "$2="
::output results
for /f "tokens=1,2 delims==" %%A in ('set $ 2^>nul') do (
    set _=%%A
    echo date !_:~1,4!-!_:~5,2!-!_:~7,2! !_:~8! Total = %%B
)
endlocal
goto:eof

'set $' は変数をアルファベット順にソートするため、出力はわずかに異なります。

于 2013-09-16T14:34:49.380 に答える