1

次の状況:次の形式の140個のプロトコルファイルを含むフォルダーがあります(一部を検閲しました)

    LÖSCHPROTOKOLL

HDShredder 3.2
licenses for
%Corporation%
%address%
%address%

Drive: %numbers and letters%
Controller: IDE #0
Kanal: Primary 
Gerät: Master   
LUN: N/A
serial number: %numbers and letters% 
Größe: 78165360 Sektoren (38166 MB)   

HDShredder gestartet am 2.01.2012 um 14:48:46
Verwendete Löschmethode: %deletion methode% (Standard)

Durchlauf 1 von 3 gestartet um 14:48:46
Lösche
Muster: FFFFFFFF
Durchlauf 2 von 3 gestartet um 15:02:34
Lösche
Muster: 00000000
Durchlauf 3 von 3 gestartet um 15:16:23
Lösche
Muster: 55555555
Beendet am 2.01.2012 um 15:30:12

END OF FILE

ただし、ファイルにはSHRED001.LOG SHRED002.LOGetc のような名前が付けられており、シリアル番号を付けて名前を変更するのが好きです。

これは私がこれまでに試したことです

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

echo test


for %%d in (C:\Protokolle\protokolle\SHRED*) do (
    for /F "skip=13 eol=; delims=?" %%i in (%%d) do (
      echo %%i >> C:\Protokolle\protokolle\liste.txt    
      echo %%i
    )
)

終了したら、上記のようにファイルの名前を変更し (まだ実装されていません)、すべての番号を extern ファイルに収集する必要があります。liste.txt

しかし、バッチを開始すると、1 つのシリアル番号で始まる無限のテキスト ファイルと、すべてのテキスト ファイルの内容が組み合わされたものしか得られません。

誰かがアイデアを持っていることを願っています。ご挨拶:)

4

2 に答える 2

3

内側の for ループは、最初の 13 行 (参照)を省略して、指定されたファイル内のすべての行for /F "skip=13 eol=; delims=?" %%i in (%%d) do (を反復処理します。そのため、出力はあなたが説明したように見えます。私が正しく理解している場合、文字列で始まる行のみを解析したい- ( reference )を使用してこれを達成できます。私はあなたの名前を変更することを含めてスクリプトを書き上げようとしました:%%dserial number:FINDSTR

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

FOR %%d IN ("C:\Protokolle\protokolle\SHRED*") do (
    FOR /F "tokens=2 delims=:" %%i IN ('FINDSTR /c:"serial number" "%%d"') DO (
       ECHO %%i
       :: copy string for string manipulation
       SET tmp=%%i
       :: get rid of leading space
       SET serial=!tmp: =!
       :: log serial to list file
       ECHO !serial! >> "C:\Protokolle\protokolle\liste.txt"
       :: rename file
       MOVE "%%d" "C:\Protokolle\protokolle\SHRED!serial!.log"
    )
)
于 2013-02-27T13:14:48.733 に答える
0

これが完成した作業スクリプトです。助けてくれてありがとう:)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET /A files=0
SET /A todo=0

::  Checking wheather a log-file exists
::  If not: Error message and exit.
IF NOT EXIST .\SHRED* (
    ECHO No matching logfile found.
    ECHO Exit!
    ECHO.
    PAUSE
    EXIT
)

::for the "loading Screen"
@FOR %%e in (".\SHRED*") do set /A files=files+1
ECHO !files! Files found!
:: waiting... this way we avoid the need of pressing a button
PING 127.0.0.1 -n 3 > NUL

FOR %%d IN (".\SHRED*") do (
    ::  Checking for a "Seriennummer"-String and copying everything after it
    FOR /F "tokens=2 delims=:" %%i IN ('FINDSTR /c:"serial number" "%%d"') DO (
        CLS
        ::    for the "loading Screen"
        SET  /A todo=todo+1
        ::   copy string for string manipulation
        SET  tmp=%%i
        ::   get rid of leading space
        SET  serial=!tmp: =!
        ::   delete the last character of the string
        SET  serial=!serial:~0,-1!
        ::   ECHOing of the serial and the "loading screen"
        ECHO !serial! !todo! von !files!
        ::   log serial to list file
        ECHO !serial!>> ".\1Uebersicht.txt"
        ::   rename file
        MOVE "%%d" ".\!serial!.log"
    )
)

::  checking if there is still a log-file left
IF EXIST ".\SHRED*" (
    ECHO An error occoured.
    ECHO Not all log-files were renamed
    ECHO.
    PAUSE
    EXIT
)

CLS
ECHO !files! files renamed.
ECHO overview list created.
ECHO please refresh the directory
ECHO.
PAUSE
于 2013-03-04T08:16:40.653 に答える