Ich versuche, eine Batch-Datei zu machen, die den Benutzer fragt, eine Mitarbeiter-ID und eine Menge an Geld, die sie möchten, dass besagte Mitarbeiter Gehalt durch erhöhen. Um dies zu tun, muss ich das Gehaltsfeld einer .txt-Datei nur für den Angestellten mit der ID ändern, die der Benutzer eingegeben hat. Unten ist der Code, den ich gerade verwende, aber ich kann nicht scheinen, irgendwo damit zu kommen, weil es gerade den Fehler ausspuckt. HierBatch-Datei Text bearbeiten
REM Prompt the user for the ID they wish to search
set /p idSearch=Enter the employee's ID number:
set /p raise=Enter the raise ammount:
echo.
REM Set the file to search
set file="employees.txt"
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1-5 delims=," %%i in (!file!) do (
if %%i=="ID: !idSearch!" (
set /a new_amount=%%s+!raise!
echo ID: %%i FIRST: %%f LAST: %%l AGE: %%a Salary: $!new_amount!
) else (
echo ERROR
)
)
pause
ist ein Beispiel dafür, was in der TXT-Datei ist:
ID: 20 FIRST: John LAST: Smith AGE: 30 SALARY: $20000
Mit der Datenzeile, die Sie anzeigen, wird die gesamte Zeile '%% i' zugewiesen, da in der Zeile keine Kommas vorhanden sind. Wenn Sie die "delims" -Klausel entfernen, wird das Standard-Leerzeichen verwendet, und '%% i' erhält' ID: ',' %% j' '20',' %% k' 'FIRST:' usw. Dies scheint nicht mit dem Echo zu harmonieren, das Sie verwendet haben. – Magoo
Zusätzlich zum Kommentar und der Antwort von @Magoos gibt es keinen Währungsvariablentyp. Daher können Sie set/a nicht mit einer Zeichenfolge verwenden, die mit einem Dollarzeichen beginnt. Feldnamen in jeder Zeile Ihrer Datei zu haben ist furchtbar ineffizient. – LotPings
@Magoo Ich habe es funktioniert jetzt dank Ihrer Hilfe, aber wenn ich versuche, es in die Textdatei zu speichern entfernt es alle anderen Mitarbeiter, die in der Datei sind. Haben Sie Vorschläge, wie Sie das beheben können? – Brett