Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

leerzeichen am anfang und ende einer batch Variablen entfernen (trim in php)

Frage Entwicklung Batch & Shell

Mitglied: OFFLINE

OFFLINE (Level 1) - Jetzt verbinden

09.01.2008, aktualisiert 18.10.2012, 20137 Aufrufe, 18 Kommentare

Hallo Leute,

ich würde gerne aus einer Variable die fürhrenden leerzeichen und die am ende entfernen falls vorhanden.
Die Anzahl der leerstellen ist unbekannt, und die leerstellen zwischen worten müssen bleiben.

%var1 =" das ist eine variabel "

ergebnis ="das ist eine variabel"

hat jemand eine idee?

vbs oder andere skripts will ich nicht umbedingt einsetzen.

Danke schonmal
Mitglied: bastla
09.01.2008 um 17:58 Uhr
Hallo OFFLINE!

Genau genommen sind die Leerzeichen in Deinem Beispiel keine führenden Leerzeichen, da sich davor ein Anführungszeichen befindet (in Batch werden Strings grundsätzlich nicht in Anführungszeichen eingeschlossen).

Beispiel mit "echten" führenden Leerzeichen:
01.
@echo off & setlocal 
02.
set "var1=   das ist eine variable     " 
03.
echo Vorher:  #%var1%# 
04.
 
05.
:loop1 
06.
if "%var1:~0,1%"==" " set "var1=%var1:~1%" & goto :loop1 
07.
:loop2 
08.
if "%var1:~-1%"==" " set "var1=%var1:~0,-1%" & goto :loop2 
09.
 
10.
echo Nachher: #%var1%#
Sollte der Inhalt der Variablen aber tatsächlich die beschriebenen Anführungszeichen enthalten, dann so:
01.
@echo off & setlocal 
02.
set var1=" das ist eine variabel " 
03.
echo Vorher:  %var1% 
04.
for /f "delims=" %%i in (%var1%) do set "var1=%%~i" 
05.
 
06.
:loop1 
07.
if "%var1:~0,1%"==" " set "var1=%var1:~1%" & goto :loop1 
08.
:loop2 
09.
if "%var1:~-1%"==" " set "var1=%var1:~0,-1%" & goto :loop2 
10.
 
11.
set var1="%var1%" 
12.
echo Nachher: %var1%
Grüße
bastla
Bitte warten ..
Mitglied: OFFLINE
10.01.2008 um 12:38 Uhr
Hallo bastla

dein skript funktioniert einwandfrei, Danke vielmals.
ich habe die erste variante gewählt, da keine "" vorkommen.

Allerdings habe ich noch ein kleines Problem mit dem Einbinden:

01.
FOR /F "eol=# tokens=1-12 delims=;" %%a IN (imptest.csv) DO ( 
02.
        echo #%%d# 
03.
        :loop1 
04.
        if "%%d:~0,1%"==" " set "d=%%d:~1%" & goto :loop1 
05.
        :loop2 
06.
        if "%%d:~-1%"==" " set "d=%%d:~0,-1%" & goto :loop2 
07.
        echo #%%d# 
08.
)
Ich bekomme beim Ausführen Syntaxfehler. Leider kann ich es mir nicht erklären warum.
Danke für die Hilfe
Bitte warten ..
Mitglied: bastla
10.01.2008 um 15:21 Uhr
Hallo OFFLINE!

Die Zerlegung in Teilstrings lässt sich auf die Laufvariablen von "for"-Schleifen nicht anwenden, daher musst Du den gelesenen Wert zunächst einer anderen Variablen zuweisen.

Je nachdem, ob Du ausschließen kannst, dass die zu verarbeitenden Daten das Zeichen "!" enthalten, gibt es zwei mögliche Vorgangsweisen: die Verwendung eines Unterprogrammes oder die "delayedexpansion", die "verzögerte Variablenauflösung". Für letztere gilt die oben angeführte Einschränkung auf Variablenwerte ohne "!".

Mit Unterprogramm würde es dann so aussehen:
01.
@echo off & setlocal 
02.
FOR /F "eol=# tokens=1-12 delims=;" %%a IN (imptest.csv) DO call :ProcessLine "%%~d" 
03.
goto :eof 
04.
 
05.
:ProcessLine 
06.
set "valtemp=%~1" 
07.
echo #%valtemp%# 
08.
 
09.
:loop1 
10.
if "%valtemp:~0,1%"==" " set "valtemp=%valtemp:~1%" & goto :loop1 
11.
:loop2 
12.
if "%valtemp:~-1%"==" " set "valtemp=%valtemp:~0,-1%" & goto :loop2 
13.
 
14.
echo #%valtemp%# 
15.
goto :eof
Einige Anmerkungen:

Sollten die aus der CSV-Datei ausgelesenen Werte in Anführungszeichen eingeschlossen sein, werden diese durch die Schreibweise %%~d entfernt. Da der Wert an das Unterprogramm (entspricht einem externen, eigenständigen Batch) weitergegeben werden soll, wird er neuerlich zwischen Anführungszeichen gesetzt (um ev "Binnen"-Leerzeichen zu erhalten und den vollständigen Wert weiterzugeben). Durch diese Vorgangsweise wird sichergestellt, dass, unabhängig von der Darstellung der Ausgangsdaten mit oder ohne Anführungszeichen, die Übergabe mit Anführungszeichen erfolgt.

Im Unterprogramm kommt dieser Parameter als %1 an und wird (durch %~1 von den umgebenden Anführungszeichen "befreit") in die Variable %valtemp% "umgespeichert, da auch mit den Parametervariablen %0 bis %9 die Stringzerlegung nicht durchgeführt werden kann.

Noch kurz zu "goto :eof": Damit wird das Ende eines Programmteiles signalisiert, was für das Hauptprogramm "Ende Batch" bedeutet, während es im Unterprogramm als "Return" interpretiert wird. Soferne nach dem Unterprogramm keine weiteren Batchzeilen folgen, kannst Du es auch weglassen - der Rücksprung erfolgt dennoch.

Sollte übrigens %%d tatsächlich ein Wert ohne enthaltene Leerzeichen sein, würde auch schon
01.
@echo off & setlocal 
02.
FOR /F "eol=# tokens=1-12 delims=;" %%a IN (imptest.csv) DO call :ProcessLine %%~d 
03.
goto :eof 
04.
 
05.
:ProcessLine 
06.
echo #%1# 
07.
goto :eof
genügen, da bei der Parameterübergabe die Leerzeichen als Trennzeichen gelten und damit weg fallen.

Grüße
bastla
Bitte warten ..
Mitglied: OFFLINE
10.01.2008 um 18:36 Uhr
Hallo bastla,

danke vielmals für deine bemühungen, ich hätte nicht gedacht, dass es so aufwendig ist, so etwas zu realisieren. Leider funktioniert das obere Skript nur bedingt, da es auch gelegentlich werte gibt, die leer sind. in der CVS-Datei sind sie dann nicht leer, sondern werden durch eine unbestimmte anzahl leertasten dargestellt.
wenn ich mir die schleifendurchläufe ansehe, sehe ich, dass bei jedem durchlauf der wert um ein leerzeichen verkürzt wird. Nach dem letzten Leerzeichen kommt ein Syntaxfehler.

man muss also noch abfangen, falls die variablen nur leertasten enthalten....

ich hoffe das ist nicht zuviel verlangt.
Bitte warten ..
Mitglied: bastla
10.01.2008 um 23:13 Uhr
Hallo OFFLINE!

Unter der Voraussetzung, dass die Trennzeichen (";") bei leeren Werten nicht unmittelbar aufeinander folgen, sondern dazwischen mindestens 1 Leerzeichen steht, sollte es genügen, nach ":loop1" folgende Zeile einzufügen:
01.
if not defined valtemp goto :NoValue
und nach der (bisher) letzten Zeile die Fehlerbehandlung für diesen Fall durchzuführen - Beispiel:
01.
:NoValue 
02.
echo Es wurde kein Wert gefunden! 
03.
goto :eof
Sollten allerdings zwei ";" unmittelbar aufeinander folgen, werden diese als nur ein Trennzeichen interpretiert und es wird dann der Wert des nächsten nicht leeren Feldes verwendet - sag Bescheid, falls das bei Dir zutreffen sollte.

Grüße
bastla
Bitte warten ..
Mitglied: OFFLINE
15.01.2008 um 00:23 Uhr
Hallo bastla,
übers wochenende bin ich nicht dazu gekommen mir deinen vorschlag anzusehen.
heute hab ich mich dann mal drangewagt. funktioniert auch bestens.

allerdings habe ich etwas anderes bemerkt:
kann es sein, dass die for-schleife den string in nur maximal 9 tokens cutten kann?
bei allen datensätzen funktioniert die batch bei den letzten 3 werten nicht. in den variablen steht dann der wert der ersten variabel mit einer angehängten laufenden nummer. Bsp:
Aus:
01.
  48810;   8; 13;MARTIN MEIER, SPIELWAREN   ;INH. MARTIN MEIER     ;35339  ;MARWALD       ;HAFFOELLERSTR. 198       ;INFO@SPIELWAREN.DE  ;07421/9737-0   ;07421/973735   ;  6;  
wird:
01.
#48810# 
02.
#8# 
03.
#13# 
04.
#MARTIN MEIER, SPIELWAREN# 
05.
#INH. MARTIN MEIER# 
06.
#35339# 
07.
#MARWALD# 
08.
#HAFFOELLERSTR. 198# 
09.
#INFO@SPIELWAREN.DE# 
10.
#488100# 
11.
#488101# 
12.
#488102#
ich kann es mir leider nicht ganz erklären...

wenn die for-schleife nur 9 werte übergeben kann, brauche ich eine andere lösung.

Danke schonmals.
Bitte warten ..
Mitglied: bastla
15.01.2008, aktualisiert 18.10.2012
Hallo OFFLINE!

Besteht das Problem nach Berücksichtigung von http://www.administrator.de/forum/csv-datei-per-batch-in-einzelne-varia ... immer noch?

Falls ja, bitte Deinen Code posten ...

Grüße
bastla
Bitte warten ..
Mitglied: OFFLINE
15.01.2008 um 00:36 Uhr
hier mein code (in stark vereinfachter form):


import.bat
01.
 
02.
@echo off  
03.
setlocal 
04.
 
05.
FOR /F "eol=# tokens=1-12 delims=;" %%a IN (imptest.csv) DO call :ProcessLine "%%~a" "%%~b" "%%~c" "%%~d" "%%~e" "%%~f" "%%~g" "%%~h" "%%~i" "%%~j" "%%~k" "%%~l"  
06.
 
07.
:ProcessLine 
08.
echo %~1 
09.
echo %~2 
10.
echo %~3 
11.
echo %~4 
12.
echo %~5 
13.
echo %~6 
14.
echo %~7 
15.
echo %~8 
16.
echo %~9 
17.
echo %~10 
18.
echo %~11 
19.
echo %~12
imptest.csv
01.
   1520;   2;  1;DRESCHEL                       ;INH. H. DRESCHEL               ;91745  ;HEMKLOR                       ;STAEDER STR. 21                ;                                         ;<07771/123223177>   ;FAX 07771/23791235 ;  6;   
02.
 
Bitte warten ..
Mitglied: bastla
15.01.2008, aktualisiert 18.10.2012
Hallo OFFLINE!

In diesem Fall muss ich auf http://www.administrator.de/forum/csv-datei-per-batch-in-einzelne-varia ... und den von miniversum verwendeten "shift"-Befehl verweisen, da tatsächlich bei %9 (oder %~9) Schluss ist.

Brauchst Du denn alle 12 Felder? Falls doch nicht, könntest Du ja die Buchstaben der nicht benötigten Felder nach "call :ProcessLine" weglassen ...

Grüße
bastla
Bitte warten ..
Mitglied: OFFLINE
15.01.2008 um 00:56 Uhr
Hallo bastla,

ja ich brauche alle 12
mit dem shift befehl funktioniert es allerdings. Hatte ich in der eile bei miniversum übersehen.
musste nur gerade feststellen, dass > und < in der csv nicht funktionieren.
aber ich denke dafür mache ich einen neuen thread auf, falls ich nichts finden sollte was aus der csv alle < und > entfernt. Hm am besten wäre es wohl alle "" >< und / \ zu entfernen, um möglichst allen problemen aus dem weg zu gehen.

danke vielmals für die Hilfe
Bitte warten ..
Mitglied: bastla
15.01.2008 um 01:24 Uhr
Hallo OFFLINE!

Als Zwischenschritt:
01.
@echo off 
02.
setlocal 
03.
 
04.
FOR /F "eol=# delims=" %%z IN (imptest.csv) DO set "Zeile=%%~z" & call :ProcessLine 
05.
goto :eof 
06.
 
07.
:ProcessLine 
08.
set "Zeile=%Zeile:"=%" 
09.
set "Zeile=%Zeile:<=%" 
10.
set "Zeile=%Zeile:>=%" 
11.
for /f "tokens=1-12 delims=;" %%a in ("%Zeile%") do ( 
12.
	set "var1=%%~a" 
13.
	set "var2=%%~b" 
14.
	set "var3=%%~c" 
15.
	set "var4=%%~d" 
16.
	set "var5=%%~e" 
17.
	set "var6=%%~f" 
18.
	set "var7=%%~g" 
19.
	set "var8=%%~h" 
20.
	set "var9=%%~i" 
21.
	set "var10=%%~j" 
22.
	set "var11=%%~k" 
23.
	set "var12=%%~l" 
24.
25.
echo %var1% %var2% %var3% %var4% %var5% %var6% %var7% %var8% %var9% %var10% %var11% %var12%
Grüße
bastla

P.S.: Und Du bist ganz sicher, dass es Batch sein soll, und nicht vielleicht VBS?
Bitte warten ..
Mitglied: bastla
15.01.2008 um 01:46 Uhr
... und so schon näher am Ergebnis:
01.
@echo off 
02.
setlocal 
03.
 
04.
FOR /F "eol=# delims=" %%z IN (imptest.csv) DO set "Zeile=%%~z" & call :ProcessLine 
05.
goto :eof 
06.
 
07.
:ProcessLine 
08.
::Sonderzeichen entfernen 
09.
set "Zeile=%Zeile:"=%" 
10.
set "Zeile=%Zeile:<=%" 
11.
set "Zeile=%Zeile:>=%" 
12.
 
13.
::Leerzeichen entfernen 
14.
:loop 
15.
set "ZeileAlt=%Zeile%" 
16.
set "Zeile=%Zeile: ;=;%" 
17.
set "Zeile=%Zeile:; =;%" 
18.
if "%Zeile:~0,1%"==" " set "Zeile=%Zeile:~1%" 
19.
if "%Zeile:~-1%"==" " set "Zeile=%Zeile:~0,-1%" 
20.
if "%Zeile%" neq "%ZeileAlt%" goto :loop 
21.
 
22.
::Leere Felder durch "_" kennzeichnen (wegen Reihenfolge bei der Zerlegung) 
23.
:loop2 
24.
set "ZeileAlt=%Zeile%" 
25.
set "Zeile=%Zeile:;;=;_;%" 
26.
if "%Zeile%" neq "%ZeileAlt%" goto :loop2 
27.
 
28.
for /f "tokens=1-12 delims=;" %%a in ("%Zeile%") do ( 
29.
	set "var1=%%~a" 
30.
	set "var2=%%~b" 
31.
	set "var3=%%~c" 
32.
	set "var4=%%~d" 
33.
	set "var5=%%~e" 
34.
	set "var6=%%~f" 
35.
	set "var7=%%~g" 
36.
	set "var8=%%~h" 
37.
	set "var9=%%~i" 
38.
	set "var10=%%~j" 
39.
	set "var11=%%~k" 
40.
	set "var12=%%~l" 
41.
42.
echo #%var1%#  #%var2%#  #%var3%#  #%var4%#  #%var5%#  #%var6%#  #%var7%#  #%var8%#  #%var9%#  #%var10%#  #%var11%#  #%var12%#
Grüße
bastla
Bitte warten ..
Mitglied: OFFLINE
15.01.2008 um 11:53 Uhr
hallo bastla,
dir scheint das ja richtig spass zu machen den leuten hier mit ihren problemen zu helfen

ich bin mir mittlerweile nicht mehr so sicher, ob ein vbs nicht vielleicht besser wäre. ich hätte nicht gedacht, dass es so aufwändig ist, eine csv einzulesen und in einzelne werte zu zerteilen.
ich werde mal geschwind alles zusammenbauen und dann hier posten. vielleicht hat jemand dann doch eine bessere idee.

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: bastla
15.01.2008 um 13:03 Uhr
Hallo OFFLINE!

dir scheint das ja richtig spass zu machen den leuten hier mit ihren problemen zu helfen
Wie kommst Du denn auf die Idee?

ich werde mal geschwind alles zusammenbauen und dann hier posten.
Gute Strategie, falls damit gemeint ist, dass Du die weiteren Verarbeitungsschritte (bzw das eigentliche Ziel der Aktion) beschreiben willst ...

Grüße
bastla
Bitte warten ..
Mitglied: OFFLINE
16.01.2008 um 14:21 Uhr
so ich habe hier mal den gesamten code. ist doch mehr geworden als ich dachte.
im grunde will ich einen csv export komplett umformatieren um per csvde in ad einlesen zu können. dieser vorgang wird 1x alle 24h durchgeführt.

01.
@echo off  
02.
setlocal 
03.
del temp.csv 
04.
del temp2.csv 
05.
del neuecsv.csv 
06.
echo DN,objectClass,displayName,sn,streetAddress,postalCode,l,mail, 
07.
telephoneNumber,facsimile TelephoneNumber,extensionAttribute1, 
08.
extensionAttribute2,extensionAttribute3,extensionAttribute12 >> neuecsv.csv 
09.
 
10.
FOR /F "delims=|" %%x IN (EXKD002.csv) DO echo %%x >> temp.csv 
11.
more +1 temp.csv > temp2.csv 
12.
dsrm "OU=ordner2,OU=ordner1,OU=Kontakte,DC=domain,DC=de" -subtree -exclude -noprompt 
13.
FOR /F "eol=# delims=" %%z IN (temp2.csv) DO set "Zeile=%%~z" & call :ProcessLine1 
14.
goto :eof 
15.
 
16.
:ProcessLine1 
17.
set "Zeile=%Zeile:"=%" 
18.
set "Zeile=%Zeile:,=%" 
19.
set "Zeile=%Zeile:<=%" 
20.
set "Zeile=%Zeile:>=%" 
21.
 
22.
FOR /F "eol=# tokens=1-12 delims=;" %%a IN ("%Zeile%") DO call :ProcessLine2 "%%~a" "%%~b" "%%~c" 
23.
 "%%~d" "%%~e" "%%~f" "%%~g" "%%~h" "%%~i" "%%~j" "%%~k" "%%~l"  
24.
goto :eof 
25.
 
26.
:ProcessLine2 
27.
	set "sp1=%~1" 
28.
	set "sp2=%~2" 
29.
	set "sp3=%~3" 
30.
	set "sp4=%~4" 
31.
	set "sp5=%~5" 
32.
	set "sp6=%~6" 
33.
	set "sp7=%~7" 
34.
	set "sp8=%~8" 
35.
	set "sp9=%~9" 
36.
	shift 
37.
	set "sp10=%~9" 
38.
	shift 
39.
	set "sp11=%~9" 
40.
	shift 
41.
	set "sp12=%~9" 
42.
	 
43.
	:loop1 
44.
	if not defined sp1 goto :sp1NoValue 
45.
	if "%sp1:~0,1%"==" " set "sp1=%sp1:~1%" & goto :loop1 
46.
        :loop2 
47.
        if "%sp1:~-1%"==" " set "sp1=%sp1:~0,-1%" & goto :loop2 
48.
	:sp1NoValue 
49.
	:loop3 
50.
	if not defined sp2 goto :sp2NoValue 
51.
	if "%sp2:~0,1%"==" " set "sp2=%sp2:~1%" & goto :loop3 
52.
	:loop4 
53.
	if "%sp2:~-1%"==" " set "sp2=%sp2:~0,-1%" & goto :loop4 
54.
	:sp2NoValue 
55.
	:loop5 
56.
	if not defined sp3 goto :sp3NoValue 
57.
	if "%sp3:~0,1%"==" " set "sp3=%sp3:~1%" & goto :loop5 
58.
	:loop6 
59.
	if "%sp3:~-1%"==" " set "sp3=%sp3:~0,-1%" & goto :loop6 
60.
	:sp3NoValue 
61.
	:loop7 
62.
	if not defined sp4 goto :sp4NoValue 
63.
	if "%sp4:~0,1%"==" " set "sp4=%sp4:~1%" & goto :loop7 
64.
	:loop8 
65.
	if "%sp4:~-1%"==" " set "sp4=%sp4:~0,-1%" & goto :loop8 
66.
	:sp4NoValue 
67.
	:loop9 
68.
	if not defined sp5 goto :sp5NoValue 
69.
	if "%sp5:~0,1%"==" " set "sp5=%sp5:~1%" & goto :loop9 
70.
	:loop10 
71.
	if "%sp5:~-1%"==" " set "sp5=%sp5:~0,-1%" & goto :loop10 
72.
	:sp5NoValue 
73.
	:loop11 
74.
	if not defined sp6 goto :sp6NoValue 
75.
	if "%sp6:~0,1%"==" " set "sp6=%sp6:~1%" & goto :loop11 
76.
	:loop12 
77.
	if "%sp6:~-1%"==" " set "sp6=%sp6:~0,-1%" & goto :loop12 
78.
	:sp6NoValue 
79.
	:loop13 
80.
	if not defined sp7 goto :sp7NoValue 
81.
	if "%sp7:~0,1%"==" " set "sp7=%sp7:~1%" & goto :loop12 
82.
	:loop14 
83.
	if "%sp7:~-1%"==" " set "sp7=%sp7:~0,-1%" & goto :loop14 
84.
	:sp7NoValue 
85.
	:loop15 
86.
	if not defined sp8 goto :sp8NoValue 
87.
	if "%sp8:~0,1%"==" " set "sp8=%sp8:~1%" & goto :loop15 
88.
	:loop16 
89.
	if "%sp8:~-1%"==" " set "sp8=%sp8:~0,-1%" & goto :loop16 
90.
	:sp8NoValue 
91.
	:loop17 
92.
	if not defined sp9 goto :sp9NoValue 
93.
	if "%sp9:~0,1%"==" " set "sp9=%sp9:~1%" & goto :loop17 
94.
	:loop18 
95.
	if "%sp9:~-1%"==" " set "sp9=%sp9:~0,-1%" & goto :loop18 
96.
	:sp9NoValue 
97.
	:loop19 
98.
	if not defined sp10 goto :sp10NoValue 
99.
	if "%sp10:~0,1%"==" " set "sp10=%sp10:~1%" & goto :loop19 
100.
	:loop20 
101.
	if "%sp10:~-1%"==" " set "sp10=%sp10:~0,-1%" & goto :loop20 
102.
	:sp10NoValue 
103.
	:loop21 
104.
	if not defined sp11 goto :sp11NoValue 
105.
	if "%sp11:~0,1%"==" " set "sp11=%sp11:~1%" & goto :loop21 
106.
	:loop22 
107.
	if "%sp11:~-1%"==" " set "sp11=%sp11:~0,-1%" & goto :loop22 
108.
	:sp11NoValue 
109.
	:loop23	 
110.
	if not defined sp12 goto :sp12NoValue 
111.
	if "%sp12:~0,1%"==" " set "sp12=%sp12:~1%" & goto :loop23 
112.
	:loop24 
113.
	if "%sp12:~-1%"==" " set "sp12=%sp12:~0,-1%" & goto :loop24         
114.
	:sp12NoValue 
115.
 
116.
	echo "CN=%sp4%,OU=ordner2,OU=ordner1,OU=Kontakte,DC=domain,DC=de",contact,"%sp4%", 
117.
"%Sp5%","%sp8%","%sp6%","%sp7%","%sp9%","%sp10%","%sp11%","%sp1%","%sp2%", 
118.
"%sp3%","%sp12%" >> neuecsv.csv
ein problem bleibt allerdings noch übrig:
in der letzten Zeile füge ich die werte in einer datei in der richtigen reihenfolge mit "%spx%" wieder zusammen (sp steht für spalte).
wenn eine spalte leer ist, dann steht ,"", in der datei. beim import nimmt er das dann nicht an. er erwartet bei leeren feldern ,, Ich benötige die "" aber, da es werte mit leerzeichen gibt.
ich habe ja die :spxNoValue für jede variable sobald diese leer ist. wie kann ich jetzt die letzte echo zeile verändern, dass wenn eine var keinen wert hat die "" nicht in die datei kommen?

DANKE,DANKE,DANKE für die super geniale Hilfe.
Bitte warten ..
Mitglied: bastla
16.01.2008 um 14:39 Uhr
Hallo OFFLINE!

wie kann ich jetzt die letzte echo zeile verändern, dass wenn eine var keinen wert hat die "" nicht in die datei kommen?
Bist Du sicher, dass die Anführungszeichen beim Import benötigt werden (denn für die "echo"-Zeile sind sie eigentlich nicht erforderlich)?

Ansonsten fiele mir folgender Workaround ein: Da jedes Feld (außer dem letzten) ein anschließendes "," benötigt, könntest Du dieses einfach dem Feldinhalt hinzufügen. Wenn ein Feld leer ist ("if not defined"), erhält es eben als einzigen Inhalt ein Komma. Natürlich müssten dann auch die erforderlichen Anführungszeichen bereits Feldinhalt werden [Edit] Unnötiger Schnellschuss ... [/Edit]

Besser (einfacher): Wo benötigt (bzw für alle nicht leeren Felder), die Anführungszeichen in das Feld aufnehmen. [Edit] Siehe unten [/Edit]

Grüße
bastla

[Edit] Idee für Workaround genauer formuliert. [/Edit]
Bitte warten ..
Mitglied: OFFLINE
16.01.2008 um 14:43 Uhr
ich benotige die anführungszeichen für das programm csvde, beim import.

wenn ein wert eine leertaste hat kommt ein fehler wenn keine ""

geht: "das ist ein test","bla","blubb",,,"bä"
geht nicht: das ist ein test,bla,blubb,,,bä
geht nicht:"das ist ein test","bla","blubb","","","bä"
Bitte warten ..
Mitglied: bastla
16.01.2008 um 14:52 Uhr
Hallo OFFLINE!

Dann am besten in der Art:
01.
	:loop1 
02.
	if not defined sp1 goto :sp1NoValue 
03.
	if "%sp1:~0,1%"==" " set "sp1=%sp1:~1%" & goto :loop1 
04.
	set sp1="%sp1%"
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...