Mehrere Dateien im Batch per Drag und Drop bearbeiten lassen
Aloha zusammen!
Ich weiß, es ist Sonntag Nachmittag und darum kriege ich wahrscheinlich einfach keine Lösung zusammen aber ich hoffe dennoch, dass ihr mir erneut bei einer kleinen Sache helfen könnt.
Also es geht um folgendes:
Auf einem ROOT von einem Privat-MMORPG liegen tausende von .ini Dateien (Spielerdateien), die für gewisse Dinge bearbeitet werden müssen aber nicht immer alle, sondern nur ausgewählte. (werden zur Not auf den lokalen PC zwischenkopiert, bearbeitet und wieder zurückkopiert.
Ich habe das Skript für eine einzelne Datei für D&D bereits realisiert (in diesem Fall für das Addieren von Skillpunkten), doch scheitere ich daran, dies für mehrere Dateien gleichzeitig umzusetzen, sprich z.B. 100 Dateien auf das Batch ziehen und durchackern lassen.
Der code sieht momentan wie folgt aus:
Soweit, so gut. Ich habe versucht per
es für mehrere Dateien ausgeführt zu bekommen, das haut aber nicht ganz hin. Ich nehme an, die einzelne Datei muss anders definiert werden(?) ...
Habe bereits ein wenig im Forum danach geforstet, allerdings ohne Erfolg für meine Umsetzung.
Also bin ich dieses Mal auf eure Hilfe, Ratschläge etc. angewiesen. =)
greetz André
EDIT Das VBS überschreibt ja jetzt sämtliche Vorkommnisse von %Von% mit %Nach%, allerdings habe ich im Skript für die Leveländerung mehrfach einen Level drin (daher auch die Zeilenbeschränkung im Skript), der aber nur in der gewählten Zeile überschrieben werden darf.
Wie kann ich dieses per VBS realisieren, bin auf nichts brauchbares gestoßen, was ich hier einbauen könnte ... hm
Ich weiß, es ist Sonntag Nachmittag und darum kriege ich wahrscheinlich einfach keine Lösung zusammen aber ich hoffe dennoch, dass ihr mir erneut bei einer kleinen Sache helfen könnt.
Also es geht um folgendes:
Auf einem ROOT von einem Privat-MMORPG liegen tausende von .ini Dateien (Spielerdateien), die für gewisse Dinge bearbeitet werden müssen aber nicht immer alle, sondern nur ausgewählte. (werden zur Not auf den lokalen PC zwischenkopiert, bearbeitet und wieder zurückkopiert.
Ich habe das Skript für eine einzelne Datei für D&D bereits realisiert (in diesem Fall für das Addieren von Skillpunkten), doch scheitere ich daran, dies für mehrere Dateien gleichzeitig umzusetzen, sprich z.B. 100 Dateien auf das Batch ziehen und durchackern lassen.
Der code sieht momentan wie folgt aus:
@echo off & setlocal
set "Datei=%1"
set "fest=Skillpoints="
set /p Bonus="Bitte gebe die Hoehe der Bonus-Skillpunkte an: "
for /f "tokens=2 delims=^=" %%i in ('findstr /n "^" %1^|findstr "^13:"') do set SP=%%i
echo Skillpunkte vorher: %SP%
set /a Skillpunkte=%SP%+%Bonus%
echo Skillpunkte nachher: %Skillpunkte%
set "Von=%fest%%SP%"
set "Nach=%fest%%Skillpunkte%"
set R=%temp%\ReplaceInFile.vbs
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"):Set a=WScript.Arguments:T=fso.OpenTextFile(a(0)).ReadAll:fso.CreateTextFile(a(0)).Write Replace(T,a(1),a(2))
cscript //nologo %R% "%Datei%" "%Von%" "%Nach%"
pause
Soweit, so gut. Ich habe versucht per
for %%f in (%*) do (
DasganzeSkripthinterher
)
Habe bereits ein wenig im Forum danach geforstet, allerdings ohne Erfolg für meine Umsetzung.
Also bin ich dieses Mal auf eure Hilfe, Ratschläge etc. angewiesen. =)
greetz André
EDIT Das VBS überschreibt ja jetzt sämtliche Vorkommnisse von %Von% mit %Nach%, allerdings habe ich im Skript für die Leveländerung mehrfach einen Level drin (daher auch die Zeilenbeschränkung im Skript), der aber nur in der gewählten Zeile überschrieben werden darf.
Wie kann ich dieses per VBS realisieren, bin auf nichts brauchbares gestoßen, was ich hier einbauen könnte ... hm
Please also mark the comments that contributed to the solution of the article
Content-ID: 160673
Url: https://administrator.de/contentid/160673
Printed on: December 3, 2024 at 11:12 o'clock
21 Comments
Latest comment
Hallo André,
Gruß
Friemler
- Böse Fenster, die sich nach Skriptende einfach schließen, kann man durch einen
Pause
-Befehl als letztem Kommando im Skript daran hindern. - Zum Thema "Verzögerte Variablenerweiterung" einfach mal Google oder die Suchfunktion des Forums befragen. Das Thema ist schon zu oft durchgekaut worden und gehört zum Grundlagenwissen für Batch-Programmierung. Nix für ungut, aber wenn Du Batch-Skript lernen willst, musst Du Dich mit dem Thema sowieso beschäftigen.
Gruß
Friemler
moin,
ohne eine Steuerdatei macht das testen des Schnippsels keinen allzugroßen Sinn (für uns)
Ich kann nur sehen, dass du irgendwas mit der Zeile 13 machst,
Und du willst alle Zahlen behalten, außer die in der Zeile 13?
Gruß
ohne eine Steuerdatei macht das testen des Schnippsels keinen allzugroßen Sinn (für uns)
Ich kann nur sehen, dass du irgendwas mit der Zeile 13 machst,
Und du willst alle Zahlen behalten, außer die in der Zeile 13?
Gruß
Hallo Skyemugen!
Je nachdem, ob für jede Datei einzeln die Bonuspunkte eingegeben werden sollen oder nicht, wäre die "
Grüße
bastla
Je nachdem, ob für jede Datei einzeln die Bonuspunkte eingegeben werden sollen oder nicht, wäre die "
set /p
"-Zeile in der Schleife oder bereits vor dem ":Loop
" zu platzieren:@echo off & setlocal
set "fest=Skillpoints="
set R=%temp%\ReplaceInFile.vbs
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"):Set a=WScript.Arguments:T=fso.OpenTextFile(a(0)).ReadAll:fso.CreateTextFile(a(0)).Write Replace(T,a(1),a(2))
:Loop
if "%~1"=="" goto :eof
echo %~1
set /p Bonus="Bitte gebe die Hoehe der Bonus-Skillpunkte an: "
for /f "tokens=2 delims=^=" %%i in ('findstr /n "^" %1^|findstr "^13:"') do set "SP=%%i"
echo Skillpunkte vorher: %SP%
set /a Skillpunkte=SP+Bonus
echo Skillpunkte nachher: %Skillpunkte%
set "Von=%fest%%SP%"
set "Nach=%fest%%Skillpunkte%"
cscript //nologo %R% %1 "%Von%" "%Nach%"
pause
shift
goto :Loop
bastla
Hallo Skyemugen!
Nochmals, zur Sicherheit: Ist die Nummer der Zeile, in der überschrieben werden darf, immer gleich, bzw (einfacher) soll immer in der ersten passenden Zeile geändert werden? In letzterem Fall wäre das VBScript nur ein wenig zu ergänzen:
Grüße
bastla
Ich grübel immernoch, wo der große Unterschied zwischen %1 und %~1 ist also bei der Behandlung im Batch.
%1 kann unter Anführungszeichen stehen, %~1 hat sicher keine drumherum ...Nochmals, zur Sicherheit: Ist die Nummer der Zeile, in der überschrieben werden darf, immer gleich, bzw (einfacher) soll immer in der ersten passenden Zeile geändert werden? In letzterem Fall wäre das VBScript nur ein wenig zu ergänzen:
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"):Set a=WScript.Arguments:T=fso.OpenTextFile(a(0)).ReadAll:fso.CreateTextFile(a(0)).Write Replace(T,a(1),a(2),1,1)
bastla
Hallo Skyemugen!
Trotzdem noch die Variante mit der festen Zeilennummer (genauso ungetestet wie der Rest, den ich da oben verbrochen habe ):
Hier wird bei Einlesen durch "
[Edit2 + 3] Fehlendes "T(%Zeile%)=" ergänzt [/Edit2 + 3]
[Edit] Die andere Version oben hat nur als Erweiterung des "
Grüße
bastla
Trotzdem noch die Variante mit der festen Zeilennummer (genauso ungetestet wie der Rest, den ich da oben verbrochen habe ):
@echo off & setlocal
set "fest=Skillpoints="
set /a Zeile=6
set /a Zeile-=1
set R=%temp%\ReplaceInFile.vbs
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"):Set a=WScript.Arguments:T=Split(fso.OpenTextFile(a(0)).ReadAll,vbCrLf):T(%Zeile%)=Replace(T(%Zeile%),a(1),a(2)):fso.CreateTextFile(a(0)).Write Join(T,vbCrLf)
:Loop
...
Split()
" anhand der Zeilenschaltung ("vbCrLf
" - ich setze einmal Windows-Standard voraus) ein 0-basiertes Array erzeugt, sodass sich die Zeile 6 dann in T(5) befindet - nur darin wird auch ersetzt. Abschließend wird das Array wieder (mit Trennzeichen "vbCrLf
") ge"join
"ed in die Datei geschrieben.[Edit2 + 3] Fehlendes "T(%Zeile%)=" ergänzt [/Edit2 + 3]
[Edit] Die andere Version oben hat nur als Erweiterung des "
Replace()
" die Angaben für "Anfangsposition" (=1. Zeichen des Dateiinhalts) und "Anzahl der Ersetzungen" (= 1, also nur das allererste Vorkommen) erhalten ... [/Edit]Grüße
bastla
Hallo Skayemugen!
Die Varaiante 2 sollte jetzt (wo das fehlende "
[Edit]Noch besser wird's nur, wenn auch noch "(%Zeile%)" hinzugefügt wird ... [/Edit]
Grüße
bastla
besser klug gefragt als dumm gestorben ;)
FULL ACKDie Varaiante 2 sollte jetzt (wo das fehlende "
T=
" nachgetragen ist), eigentlich auch eine bessere Chance haben ... [Edit]Noch besser wird's nur, wenn auch noch "(%Zeile%)" hinzugefügt wird ... [/Edit]
Zitat von meinem vorgesetzten Head-Administrator: „Ich könnte ihn küssen, den Goldjungen!“ *g*
Das ist ja schön - ob Du mich wohl bei der Aktion vertreten könntest? Grüße
bastla
Hallo Skyemugen!
Die Fehlermeldung ist ja dann mal eine Abwechslung - inzwischen habe ich aber sogar getestet - Ergebnis / Schlussfolgerung: siehe oben ...
Grüße
bastla
P.S.: Gedauert hat das Ganze eigentlich nur darum etwas länger, weil ich mit Tee nix am Hut hab ...
Die Fehlermeldung ist ja dann mal eine Abwechslung - inzwischen habe ich aber sogar getestet - Ergebnis / Schlussfolgerung: siehe oben ...
P.S.: Wenn du wüsstest, was mein HAdm. für ein bezauberndes Mädel ist :P
Da siehst Du mal, wie gut ich zu Dir (aber auch ihr ) bin ...Grüße
bastla
P.S.: Gedauert hat das Ganze eigentlich nur darum etwas länger, weil ich mit Tee nix am Hut hab ...
... und um das jetzt noch zu einem wirklich vernünftigen Ende zu bringen, parametrisieren wir die Zeilennummer auch noch:
Jetzt zieht das Script gleich selbst die 1 ab (um auf den richtigen Index zu kommen) und es könnte bei Bedarf auch in mehreren Zeilen ersetzt werden - einfach mehrmals das Script mit der entsprechenden Zeilennummer aufrufen ...
Grüße
bastla
@echo off & setlocal
set "fest=Skillpoints="
set /a Zeile=6
set R=%temp%\ReplaceInFile.vbs
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"):Set a=WScript.Arguments:Z=a(3)-1:T=Split(fso.OpenTextFile(a(0)).ReadAll,vbCrLf):T(Z)=Replace(T(Z),a(1),a(2)):fso.CreateTextFile(a(0)).Write Join(T,vbCrLf)
...
cscript //nologo %R% %1 "%Von%" "%Nach%" %Zeile%
...
Grüße
bastla