Wie kann man Fallstricke im ECHO-Kommando umgehen?
Ich möchte über eine Textdatei eine SQL-Abfrage übergeben. Mein bisheriger Ansatz ist
Allerdings wird das ganze offensichtlich nicht als ganze Zeile interpretiert, sonder es erscheint die FM "from" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Wieso nicht? Eigentlich sollte eine Echo-Zeile ja bis zum Ende (abgesehen von der Ausgabeumleitung) ja insgesamt interpretiert werden, warum hier nicht?
Und vor allem: Wie kann ich das Problem umgehen?
Ein Quoten in "" hab ich schon probiert, das bringt mir anschliessend einen Fehler mit der SQL-Abfrage...
Vielen Dank für Eure Hilfe und Unterstützung.
Gruß
P37
ECHO select max(pasn_auftr_nr) from ps_duepasn where pasn_nve="%%~nf">abfrage.txt
Wieso nicht? Eigentlich sollte eine Echo-Zeile ja bis zum Ende (abgesehen von der Ausgabeumleitung) ja insgesamt interpretiert werden, warum hier nicht?
Und vor allem: Wie kann ich das Problem umgehen?
Ein Quoten in "" hab ich schon probiert, das bringt mir anschliessend einen Fehler mit der SQL-Abfrage...
Vielen Dank für Eure Hilfe und Unterstützung.
Gruß
P37
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 141767
Url: https://administrator.de/contentid/141767
Ausgedruckt am: 25.11.2024 um 04:11 Uhr
12 Kommentare
Neuester Kommentar
Die Klammer im Echo ist das Problem,
der CMD Interpreter ist da ein bisschen doof und denkt das die Do Klammer hier endet.
Lagere die Befehle der DO Klammer in eine Sub aus.
Gruß
LotPings
Fehler im Del verbessert
Bibers Anmerkung eingebaut
der CMD Interpreter ist da ein bisschen doof und denkt das die Do Klammer hier endet.
Lagere die Befehle der DO Klammer in eine Sub aus.
FOR %%f IN (*.pdf) DO call :Sub "%%~nf" "%%f"
goto :EOF
:Sub
ECHO select max(pasn_auftr_nr) from ps_duepasn where pasn_nve='%~1'>abfrage.txt
MINISQL.EXE abfrage.txt antwort.txt
set /p "sendung="<"antwort.txt"
REN %2 %sendung%.pdf 2>NUL
:: der Del sollte überflüssig sein
DEL /Q %2 2>NUL
Goto :Eof
Gruß
LotPings
Fehler im Del verbessert
Bibers Anmerkung eingebaut
Moin Pegasus37,
wenn aber aber doch pasn_nve eine Zahl ist, dann kann doch
...gar nicht klappen. Dann muss es doch:
... lauten.
Und auch im String-Fall müssen EINfache statt doppelte Anführungszeichen in einem SQL-Statement verwendet werden.
Grüße
Biber
wenn aber aber doch pasn_nve eine Zahl ist, dann kann doch
... WHERE pasn_nve = "%%~nf"
... WHERE pasn_nve = %%~nf
Und auch im String-Fall müssen EINfache statt doppelte Anführungszeichen in einem SQL-Statement verwendet werden.
Grüße
Biber
Jein, da die Fehlermeldung sich auf "from" bezieht reicht es wahrscheinlich aus die schließende Klammer mit einem caret zu maskieren "^("
Allerdings haben wir auch in einem geklammerten Bereich eine Variablen Zuweisung die auch gleich genutzt wird, das würde delayed Expansion erfordern und insofern ist die Sub wahrscheinlich günstiger.
Gruß
LotPings
Allerdings haben wir auch in einem geklammerten Bereich eine Variablen Zuweisung die auch gleich genutzt wird, das würde delayed Expansion erfordern und insofern ist die Sub wahrscheinlich günstiger.
Gruß
LotPings
Hi Leute,
Mittels setzen des Strings-mit-Klammern in eine For Variable wird die Klammer beim Echo nicht interpretiert.
Gruß Phil
Mittels setzen des Strings-mit-Klammern in eine For Variable wird die Klammer beim Echo nicht interpretiert.
for /f "delims=" %%i in ("select max(pasn_auftr_nr) from ps_duepasn where pasn_nve=") do FOR %%f IN (*.pdf) DO (
ECHO %%i"%%~nf">abfrage.txt
MINISQL.EXE abfrage.txt antwort.txt
set /p "sendung="<"antwort.txt"
REN %%f %sendung%.pdf 2>NUL
)
Gruß Phil
Hallo Phil,
das ist eine Alternative, bei dem Konstrukt kannst du /f "delims=" aber auch gleich ganz weglassen
Gruß
LotPings
PS: Dir ist schon aufgefallen das der Beitrag bereits gelöst ist ?
das ist eine Alternative, bei dem Konstrukt kannst du /f "delims=" aber auch gleich ganz weglassen
Gruß
LotPings
PS: Dir ist schon aufgefallen das der Beitrag bereits gelöst ist ?
Hi LotPings,
dass der Beitrag auf gelöst gesetz war ist mir schon aufgefallen.
/f "delims=" - lass ich bei der nächsten Komplettübername der Zeichenfolge weg - danke für den Tipp.
Aber es passt ja zum Thema, wie Du schon bemerkt hast, als Alternative.
Hätte ich wohl eher ein anderes Beispiel nehmen sollen ... beim nächten mal mach ichs so
Gruß Phil
dass der Beitrag auf gelöst gesetz war ist mir schon aufgefallen.
/f "delims=" - lass ich bei der nächsten Komplettübername der Zeichenfolge weg - danke für den Tipp.
Aber es passt ja zum Thema, wie Du schon bemerkt hast, als Alternative.
Hätte ich wohl eher ein anderes Beispiel nehmen sollen ... beim nächten mal mach ichs so
Gruß Phil