2016-12-10 9 views
0

Ich benutze eine for-Schleife, um Textdateien mit vordefinierten Headern zu erstellen, aber ich möchte eine eindeutige Zeichenfolge (Alice, Bob usw.) in der zweiten Zeile für jede Datei aus einer vorgegebenen Liste anhängen.Batch, um eine bestimmte Zeichenfolge an eine bestimmte TXT-Datei aus einer vordefinierten Liste anzuhängen?

Set a=alice 
Set b=bob 
Set c=chris 

Rem ...etc. (I have about 30 files with a unique name to go in row 2 of each file) 

For /l %%x in (1, 1 , 30) do (echo headerRow1 > file%%x.txt & echo %a% > file%%x.txt) 

Ich verstehe nicht, wie automatisch für die zweite Iteration „bob“ einzufügen (dh. In „file2.txt“) und „chris“ für die dritte Iteration und 30 Dateien fortgesetzt werden.

Kann ich irgendwie den% a% -Teil wiederholen, um jedes Mal um eins zu erhöhen. Was soll ich die String-Variablen dafür nennen? Sind das überhaupt die richtigen Fragen?

Danke fürs schauen.

Antwort

0

Es scheint, dass das Problem, das Sie in der Lage sein lösen möchten, ist zwischen zwei Listen in einer for Schleife zu durchlaufen, wenn die for Schleife nur durch ein Satz zu einer Zeit durchlaufen kann. Das Problem ist insofern schwieriger, als Arrays und Listen in Batch nicht als erstklassige Bürger existieren.

Es gibt mehrere Möglichkeiten, dies zu lösen, aber ein einfacherer Weg besteht darin, die Namen zu durchlaufen und jedes Mal einen Zähler durch die Schleife zu inkrementieren. (Dies ist wahrscheinlich einfacher als eine for /l Schleife und inkrementieren die Liste der Namen.)

Hier ist ein Beispiel.

@echo off & setlocal enabledelayedexpansion 
set names=alice bob chris 
set x=1 
for %%a in (%names%) do (
    >file!x!.txt (
     echo headerRow 
     echo %%a 
    ) 
    set /a x+=1 
) 

Hinweise:

  • Stellen Sie alle Ihre Namen auf einer einzigen Zeile und eine for Schleife durch sie durchlaufen.

  • Setzen Sie den Zähler (x) am Anfang und erhöhen Sie ihn am Ende der Schleife.

  • Ich verwende verzögerte Expansion (setlocal enabledelayedexpansion) und die Syntax von !x! anstelle von %x% so daß Batch löst die variable x jedes Mal durch die Schleife, statt einmal (und nur einmal), um das erste Mal durch sie geht, so dass es jedes Mal den richtigen inkrementierten Wert erhält.

Ich hoffe, dass hilft.

+0

Das war eine unglaublich detaillierte Antwort. DANKE! Du hast gerade meinen Freitagabend gemacht :) Ich habe mich immer gefragt, was für eine Verzögerung die Expansion bewirkt hat. – Glycoversi

0
@ECHO Off 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "targetdir=U:\destdir" 
SET "filename1=%sourcedir%\q40171884.txt" 
SET "headerrow=This is your header" 
SET "line2=This is line two for " 
FOR /f "tokens=1*delims=[]" %%a IN ('find /n /v "" "%filename1%"') DO IF "%%b" neq "" (
>"%targetdir%\file%%a.txt" (
ECHO(%headerrow% 
ECHO(%line2%%%b 
TYPE "%sourcedir%\thefilecontainingtheremainder.txt" 
) 
) 

GOTO :EOF 

Sie müssten die Einstellungen von sourcedir und targetdir ändern, um Ihre Umstände anzupassen.

Ich habe eine Datei namens q40171884.txt verwendet, die Ihre Namen für meine Tests enthält.

Verwendet die Datei "%sourcedir%\thefilecontainingtheremainder.txt", um den Hauptteil der Daten zu enthalten, die der Ausgabedatei zugewiesen werden sollen. Natürlich könnte das überall sein.

Im Wesentlichen, nehmen Sie den Dateinamen mit Ihren Namen, und verwenden Sie find /n /v "", um jede Zeile mit [sequencenumber] voranstellen. Unter Verwendung delims von , weisen Sie das Präfix %%a und den Rest der Zeile (der Name) zu %%b.

Die erste Zeile Ausgabe von find wird den Dateinamen berichten, aber [] nicht enthalten (es sei denn, du dumme bekommen und es auf diese Weise Ingenieure), so %%b in diesem Fall leer. Wir überspringen diese Zeile, und für die anderen enthält %%a die Nummer und %%b den Namen.

Erstellen Sie dann neue Ausgabedateien „Datei Nummer .txt“ und die beiden Sonderlinien - die zweite mit %%b (der Name) angehängt. Dann erbrechen Sie den Rest des erforderlichen Textes einfach durch type.

+0

Danke ein Haufen Magoo! Das ist eine nette Verwendung des Suchbefehls. Ich werde wahrscheinlich sojas Methode verwenden, weil es einfacher scheint, aber ich werde definitiv Ihre für weitere Übung in Batch-Datei-Programmierung verwenden. Danke, dass du dir die Zeit genommen hast, dir zu helfen! – Glycoversi

Verwandte Themen