Ich habe ein Skript, das nicht funktioniert:
set /a num=0
for /L %%C in (1,1,31) do (
set /a num+=1
set day=%num%
for /r %%1 in ("Folder\Day_%num%.txt") do echo %num%
)
Ich brauche die in einer Schleife generierte Zahl von 1 bis 31 als Stringvariable, die zum Erstellen eines Dateinamens verwendet werden kann. In meinem Fall ist es problematisch, zu diesem Zweck sowohl den Parameter %%C als auch die numerische Variable „num“ zu verwenden. Ich habe versucht, eine Stringvariable „day“ festzulegen, die die gewünschte Zahl enthält, aber das funktioniert immer noch nicht. Ich weiß nicht, warum. Bitte helfen Sie, das Problem zu beheben.
Antwort1
Ich bin nicht sicher, ob ich richtig verstanden habe, was Sie wirklich tun möchten, aber hier ist Code, der für Sie leere Dateien mit der gewünschten Nummer im Namen erstellt. Wenn dies nicht die Antwort ist, nach der Sie suchen, geben Sie Ihre Anfrage bitte genauer an.
FOR /L %%C IN (1,1,31) DO (
ECHO. >> "Folder\Day_%%C.txt"
)
HINWEIS: Bitte stellen Sie sicher, dass das Verzeichnis „Ordner“ vorhanden ist.
Antwort2
Ich finde, Sie haben das Skript zu kompliziert gemacht. Versuchen Sie Folgendes:
for /L %%C in (1,1,31) do (
for /r %1 %%D in ("Folder\Day_%%C.txt") do echo %%D
)
Ein paar Anmerkungen:
Batch behandelt alle Variablen als Zeichenfolgen, außer bei Verwendung vonSatz /a.
Das for /L
Zählen wird für Sie übernommen, Sie müssen keine zusätzlichen Additionen durchführen.
%%C
Es ist leicht, die für die Schleife erforderliche doppelte Prozentsyntax ( ) for
mit der einfachen Prozentsyntax ( %1
) zu verwechseln, die zum Zugriff auf Argumente verwendet wird, die von der Befehlszeile an das Skript übergeben werden. Beachten Sie nur, dass Befehlszeilenargumentenurverwenden Sie die einzelne Prozentsyntax.
Ich bin mir nicht sicher, was Ihre zweite for
Schleife tun soll. Sie brauchten dort eine andere Schleifenvariable ( %%D
), damit es funktioniert. Ich vermute, Sie versuchen, die Zeilen der Datei Day_1.txt, Day_2.txt usw. auszugeben, aber ich glaube nicht, dass es so funktionieren wird, wie es derzeit geschrieben ist, insbesondere wenn Sie die Datei zuerst erstellen müssen.
Bearbeitung als Antwort auf den an Eviantons Antwort angehängten Kommentar:
Sie haben in Ihrer ursprünglichen Frage nicht angegeben, dass Sie zweistellige Tage benötigen. Der folgende Code (modifiziert von evianton) sollte dieses Problem lösen.
@echo off
setlocal enabledelayedexpansion
for /l %%C in (1,1,31) do (
set num=%%C
if %%C lss 10 set num=0%%C
echo. >> "Folder\Day_!num!.txt"
)