Kann jemand helfen, Anführungszeichen effektiv und sicher aus Stapelvariablen zu entfernen?
Ich habe eine Batch-Datei geschrieben, die erfolgreich eine Liste der Parameter% 1,% 2,% 3 usw. importiert und in benannte Variablen einfügt. Einige dieser Parameter enthalten mehrere Wörter und sind daher in doppelte Anführungszeichen eingeschlossen.
> "Susie Jo" (%1)
> "Smith Barnes" (%2)
> "123 E. Main St." (%3)
Diese% -Variablen werden als nächstes in benannte Variablen eingefügt:
> set FirstName=%1
> set LastName=%2
> set ShipAddr=%3
Die Überprüfung der Variablen erfolgt durch Echo.
echo.% Vorname%
echo.% Nachname%
echo.% ShipAddr%
Ergebnisanzeige als
"Susie Jo"
"Smith Barnes"
"123 E. Main St."
Ich muss die enthaltenen Anführungszeichen für ausgewählte Variablen entfernen. Beispielsweise werden Vorname und Nachname an anderer Stelle verwendet und dürfen keine Anführungszeichen enthalten.
In einer Test-Batch-Datei konnte ich Anführungszeichen mit dem Zeichen ~ tilde in Variablen erfolgreich entfernen.
> set FirstName=%~1
> set LastName=%~2
Ich dachte, ich hätte die Lösung, aber ich hatte bald ungewöhnliches Verhalten bei der Ausführung von Batch-Dateien. Plötzlich erkennt CMD keine Long-Path-Statements mehr. Normale Ausführung der Batchdatei vom vollständigen Pfad
> C:\Documents and Settings\Administrator\My Documents\Txt\batchtest\dataout.bat
kehrt zurück
> 'C:\Documents' is not recognized as an internal or external command....
Es scheint also, dass das Hinzufügen des ~ Tilde-Zeichens zu den eingehenden% 1% 2 ...% n-Variablen einige Änderungen verursacht hat. Möglicherweise wurden einige Umgebungsvariablen geändert?
Ich habe auch versucht, Anführungszeichen aus einer Variablen mit verschiedenen Versuchen mit dem Befehl FOR zu löschen. Das scheint unangenehm und ich konnte nicht lernen, wie dies durch Erstellen einer Liste von Variablen zur Ausführung der Aufgabe erreicht werden kann:
etwas wie das:
for %%g in (%FirstName% %LastName%) do (
set %%g=%%~g
set %%h=%%~h
set FirstName=%%~g
set LastName=%%h
echo.%FirstName% %LastName%
)
Ich glaube, ich habe zwei Probleme.
1) Meine 'kurze und süße' Idee, ~ Tilde in die eingehenden% 1% 2-Variablen (% ~ 1 usw.) einzufügen, scheint einige Einstellungen beeinflusst und die Navigation von CMD durch lange Pfadnamen geändert zu haben.
2) Ich bin immer noch auf der Suche nach einer sauberen und einfachen Möglichkeit, Anführungszeichen aus ausgewählten benannten Variablen zu entfernen.
Jede Hilfe für erfahrene Personen wäre sehr dankbar. Ich bin am Ende meiner Fähigkeiten hier ... brauche bitte eine Anleitung!
bearbeiten 26.12.2009 13:36 PST gesamte Batch-Datei:
Blockquote
:: dataout.bat
:: revision 25.12.2009 Fügen Sie ~ tilde zu eingehenden% -Variablen hinzu, um eingebettete "Anführungszeichen" zu entfernen.
:: schreibt Adressliste mit Befehlszeilenparametern
:: schreibt Datenausgabeliste für QBooks IIF-Import
:: schreibt Händlerbestelldaten für RUI
:: Beispielbefehlszeilenzeichenfolge zum Testen
:: listmail [Vorname] [Nachname] ["Adresszeichenfolge"] ["Stadtzeichenfolge"] [Bundesland] [Postleitzahl] [Bestellnummer] [Kaufdatum] [Registrierungsname] ["Vorname Nachname"] [Transaktions-ID] [Zahlungsmethode] [Gesamt] [Produkt-ID] [Menge] [Preis_Jeder] [PackPrep] [Versand] [ProvisionPmt] [Rechnungsnummer]
:: Beispiel: Datenausgabe Bellewinkle Moose "123 Green Forest Way" "Vancouver" WA 98664 1004968 25.05.2009 "Bellewinkle Moose" "Olive Oyl" 101738 "On Account" 20.67 FK-1P 1 8.95 3.00 1.39 239
@echo off
cls
c:
cd \
cd Dokumente und Einstellungen \ Administrator \ meine Dokumente \ txt \ batchtest
Echo-Verarbeitung% 1% 2
: VARISET
::Konvertieren Sie% n Befehlszeilenparameter in Zeichenfolgenvariablen
set ($ FirstName) =% ~ 1
set ($ LastName) =% ~ 2
set ($ BillingAddress1) =% ~ 3
set ($ BillingCity) =% ~ 4
set ($ BillingState) =% ~ 5
set ($ BillingPostal) =% ~ 6
set ($ OrderNumber) =% ~ 7
set ($ Purch_Date) =% ~ 8
set ($ RegistrationName) =% ~ 9
Schichtsatz
($ TransactionID) =% ~ 9
Schichtsatz
($ PaymentMethod) =% ~ 9
Schichtsatz
($ Total) =% ~ 9
Schichtsatz ($ ProductIdentifier) =% ~ 9
Schichtsatz
($ Quantity) =% ~ 9
Schichtsatz
($ Price_Each) =% ~ 9
Schichtsatz
($ Pack_Prep) =% ~ 9
Schichtsatz
($ Versand) =% ~ 9
Schichtsatz
($ ServiceFee) =% ~ 9
Schichtsatz
($ Rabatt) =% ~ 9
Schichtsatz
($ Rechnung) =% ~ 9
Schichtsatz
($ UnitPrice) =% ~ 9
Satz _ShipCombName =% ($ Vorname) %% ($ Nachname)%
Echo Schiffskombinationsname ist% _ShipCombName%
Pause
:: Zeichenfolgenvariablen in das Protokolldateiecho schreiben
FN% ($ Vorname)% LN% ($ Nachname)% BA% ($ BillingAddress1) %% ($ BillingCity) %% ($ BillingState) %% ($ BillingPostal) %% ($ Bestellnummer) %% ($ Purch_Date) %% ($ RegistrationName) %% ($ TransactionID) %% ($ PaymentMethod) %% ($ Total) %% ($ ProductIdentifier) %% ($ Quantity) %% ($ Price_Each) %% ($ Pack_Prep) %% ($ Versand) %% ($ ServiceFee) %% ($ Rabatt) %% ($ Rechnung) %% ($ UnitPrice) %% _ShipCombName% >> d_out_log.txt
:: Konto zuweisen nach Dienstanbieter
IF / i% ($ PaymentMethod)% == Amazon Receivables SET _QBAcct = Amazon.com
:: 25.12.2009 zweite Amazon pm't-Methode für Vielseitigkeit hinzugefügt
IF / i% ($ PaymentMethod)% == Amazon SET _QBAcct = Amazon.com
IF / i% ($ PaymentMethod)% == MAST SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == MasterCard SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == Visa SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == PayPal SET _QBAcct = PayPalPmts
IF / i% ($ PaymentMethod)% == Auf Konto SET _QBAcct =% ($ RegistrationName)%
IF / i% ($ PaymentMethod)% == Mail SET _QBAcct =% ($ RegistrationName)%
IF / i% ( $ PaymentMethod)% == AMER SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == DISC SET _QBAcct = Auth / Net
:: Rep-Bezeichner basierend auf QBAccount
IF / i% ($ PaymentMethod)% == Amazon Receivables SET _Rep = Amazon
:: 25.12.2009 zweite Amazon pm't-Methode für Vielseitigkeit hinzugefügt
IF / i% ($ PaymentMethod)% == Amazon SET _Rep = Amazon
IF / i% ($ PaymentMethod)% == MAST SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == MasterCard SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == Visa SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == PayPal SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == Auf Konto SET _Rep = RB
IF / i% ($ PaymentMethod)% == Mail SET _Rep = RB
IF / i% ($ PaymentMethod)% == AMER SET _Rep = BlueZap
IF / i % ($ PaymentMethod)% == DISC SET _Rep = BlueZap
:: auf doppelte Adressdaten prüfen
findstr / i / s "% _ShipCombName%" addrlist.txt
echo errorlevel:% errorlevel%
if errorlevel 1 goto: ADDRWRITE
if errorlevel 0 goto: ADDRFOUND
: ADDRWRITE
echo% _ShipCombName% >> addrlist.txt
echo% ($ BillingAddress1)% >> addrlist.txt
echo% ($ BillingCity) %% ($ BillingState) %% ($ BillingPostal)% >> addrlist.txt
echo. >> addrlist.txt
echo Adressdatei Geschrieben
: ADDRFOUND
echo ausgewählter Vertreter ist% _Rep%
echo ausgewähltes Konto ist:% _QBAcct%
pause
:: RUI OUT
:: Händlerbestell- ID & RUI- Bestell- ID in RUI schreiben
:: auf doppelte RUI-Daten prüfen in writeRUI.txt
cd ..
cd RegKOut
find / i "% ($ OrderNumber)%" writeRUI.txt
echo errorlevel:% errorlevel%
wenn errorlevel 1 gehe zu: RUIWRITE
wenn errorlevel 0 gehe zu
: IIFWRITE: RUIWRITE
echo% ($ Invoice)% % ($ OrderNumber)% >> writeRUI.txt
:: end write RUI
:: IIF OUT
: IIFWRITE
:: In writeIIF.txt auf doppelte Rechnungsdaten prüfen
find / i "% ($ OrderNumber)%" writeIIF.txt
echo errorlevel:% errorlevel%
if errorlevel 1 goto: HEADWRITE
if errorlevel 0 goto: LINEWRITE
: HEADWRITE
:: write Header-, Versand- / Bearbeitungs-, Rabatt-, Rep- und Provisionsdaten in die QB IIF-
Importdatei echo% ($ OrderNumber) %% ($ Purch_Date)% Invoice% ($ TransactionID) %% _QBAcct% Debitorenbuchhaltung% ($ Total) %% _Rep % >> writeIIF.txt
echo H / P% ($ Pack_Prep)% 1? >> writeIIF.txt
echo SHP% ($ Shipping)% 1? >> writeIIF.txt
echo DISC% ($ Discount)% 1? >> writeIIF.txt
Echo Comm% ($ ServiceFee)% 1? >> writeIIF.txt
: LINEWRITE
IF / i% ($ ProductIdentifier)% equ PH-1 gehe zu WRITE_DEFA ELSE gehe zu WRITE_DISC
echo% ($ ProductIdentifier)%
: WRITE_DISC
:: schreibt reduzierte Preise, die aus der benutzerdefinierten Variablen analysiert werden:
echo% ($ ProductIdentifier) %% ($ Price_Each) %% ($ Quantity)%? >> writeIIF.txt gehe zu
: EOF
: WRITE_DEFA
: schreibt Standardpreise, die aus Produktdaten analysiert wurden
echo% ($ ProductIdentifier) %% ($ UnitPrice) %% ($ Quantity)%? >> writeIIF.txt gehe zu
: EOF
:: 3 Sekunden Verzögerung
:: TYP NUL | CHOICE.COM / N / CY / TY, 3> NUL
: EOF