Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Wie kann man Fallstricke im ECHO-Kommando umgehen?

Frage Entwicklung Batch & Shell

Mitglied: Pegasus37

Pegasus37 (Level 1) - Jetzt verbinden

29.04.2010 um 16:26 Uhr, 3321 Aufrufe, 12 Kommentare

Ich möchte über eine Textdatei eine SQL-Abfrage übergeben. Mein bisheriger Ansatz ist
01.
ECHO select max(pasn_auftr_nr) from ps_duepasn where pasn_nve="%%~nf">abfrage.txt
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
Mitglied: bastla
29.04.2010 um 16:35 Uhr
Hallo Pegasus37!

Kann ich so nicht nachvollziehen - was steht denn in "%%f"?

Grüße
bastla
Bitte warten ..
Mitglied: Pegasus37
29.04.2010 um 16:41 Uhr
In %%f steht ein Dateiname in der Form 12345678901234567890.pdf, also eine pdf-Datei mit einer 20-stellige Zahl als Dateiname. Diese Zahl wird benutzt, um eine damit verbundene andere Zahl über die SQL-Abfrage zu bekommen und anschließend die Datei umzubenennen.

Insgesamt sieht die Sache so aus:
01.
FOR %%f IN (*.pdf) DO ( 
02.
	ECHO select max(pasn_auftr_nr) from ps_duepasn where pasn_nve="%%~nf">abfrage.txt  
03.
	MINISQL.EXE abfrage.txt antwort.txt 
04.
		set /p "sendung="<"antwort.txt" 
05.
	REN %%f %sendung%.pdf 2>NUL 
06.
DEL %%f 
07.
)
Bitte warten ..
Mitglied: LotPings
29.04.2010 um 17:07 Uhr
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.

01.
FOR %%f IN (*.pdf) DO call :Sub "%%~nf" "%%f" 
02.
 
03.
goto :EOF 
04.
:Sub 
05.
ECHO select max(pasn_auftr_nr) from ps_duepasn where pasn_nve='%~1'>abfrage.txt  
06.
MINISQL.EXE abfrage.txt antwort.txt 
07.
set /p "sendung="<"antwort.txt" 
08.
REN %2 %sendung%.pdf 2>NUL 
09.
:: der Del sollte überflüssig sein  
10.
DEL /Q  %2  2>NUL 
11.
Goto :Eof
Gruß
LotPings

Fehler im Del verbessert
Bibers Anmerkung eingebaut
Bitte warten ..
Mitglied: Biber
29.04.2010 um 17:15 Uhr
Moin Pegasus37,

wenn aber aber doch pasn_nve eine Zahl ist, dann kann doch
... WHERE pasn_nve = "%%~nf"
...gar nicht klappen. Dann muss es doch:

... WHERE pasn_nve = %%~nf
... lauten.

Und auch im String-Fall müssen EINfache statt doppelte Anführungszeichen in einem SQL-Statement verwendet werden.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
29.04.2010 um 17:39 Uhr
@LotPings
Lagere die Befehle der DO Klammer in eine Sub aus.
Sollte nicht auch ein einfaches Maskieren der Klammern reichen?

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
29.04.2010 um 17:54 Uhr
Zitat von bastla:
Sollte nicht auch ein einfaches Maskieren der Klammern reichen?
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
Bitte warten ..
Mitglied: bastla
29.04.2010 um 20:06 Uhr
@LotPings
das würde delayed Expansion erfordern und insofern ist die Sub wahrscheinlich günstiger.
Sieht zwar nicht danach aus, als ob in diesem Fall mit "!" zu rechnen wäre, aber grundsätzlich hast Du Recht ...

Grüße
bastla
Bitte warten ..
Mitglied: Pegasus37
29.04.2010 um 21:07 Uhr
So viele Antworten...
Im Moment kann ich die Vorschläge noch nicht ausprobieren, erst morgen wieder.

@Biber
pasn_nve ist ein Feldbezeichner in der Datenbank, die ich mit dem Minisql abfragen will. Die doppelten Anführungszeichen liefern mir in dem Tool schon das richtige Ergebnis, müssen also so stehen bleiben.

Das Del ist bei näherer Betrachtung jetzt aus der Ferne natürlich überflüssig.

Vielen Dank für die Hilfe.
Bitte warten ..
Mitglied: Pegasus37
30.04.2010 um 11:46 Uhr
Wie erwartet funktioniert der Vorschlag mit der Subroutine hervorragend.
Nochmals vielen Dank an alle, die sich mit meinem Problem beschäftigt haben.
Bitte warten ..
Mitglied: pieh-ejdsch
04.05.2010 um 22:38 Uhr
Hi Leute,

Mittels setzen des Strings-mit-Klammern in eine For Variable wird die Klammer beim Echo nicht interpretiert.

01.
for /f "delims=" %%i in  ("select max(pasn_auftr_nr) from ps_duepasn where pasn_nve=") do FOR %%f IN (*.pdf) DO ( 
02.
	ECHO %%i"%%~nf">abfrage.txt  
03.
	MINISQL.EXE abfrage.txt antwort.txt 
04.
		set /p "sendung="<"antwort.txt" 
05.
	REN %%f %sendung%.pdf 2>NUL 
06.
)
Gruß Phil
Bitte warten ..
Mitglied: LotPings
04.05.2010 um 22:54 Uhr
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 ?
Bitte warten ..
Mitglied: pieh-ejdsch
05.05.2010 um 10:38 Uhr
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
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Echo test.txt
gelöst Frage von CerauxBatch & Shell2 Kommentare

echo %test% >> test.txt Wie macht man es so, dass beim speichern kein Leerzeichen hinter dem Wort ist: Beispiel: ...

Router & Routing
VPN umgehen
Frage von deeliteRouter & Routing14 Kommentare

Hallo, ich hab zwischen zu Hause und meinem Büro ein VPN zwischen 2 FritzBoxen. Allerdings ist das nicht das ...

Backup
Acronis kann die Fabrik für das Kommando nicht registrieren
gelöst Frage von FA-jkaBackup5 Kommentare

Moin, mein aktuelles Acronis 11.7 (kein Supportvertrag) sagt: "cannot register an already existing factory for a command" (Modul 309, ...

Entwicklung
Wie mit Benutzerdaten umgehen?
Frage von YanmaiEntwicklung4 Kommentare

Hall ihr Administratoren, ich bin gerade am Entwickeln einer Anwendung, die Benutzerdaten lokal speichert. Zu den Benutzerdaten gehört der ...

Neue Wissensbeiträge
Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 8 StundenInternet3 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registierunf von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 15 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 1 TagWindows 104 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 1 TagSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless18 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement17 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...