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

Zeichen in Textdatei finden und ändern mit Batch

Frage Entwicklung Batch & Shell

Mitglied: ForgottenRealm

ForgottenRealm (Level 1) - Jetzt verbinden

20.01.2010, aktualisiert 20:20 Uhr, 7063 Aufrufe, 12 Kommentare

Hallo


Wieder einmal stehe ich vor einem Problem.

Ich habe ein Batchscipt geschrieben, mit welchem ich auf einem Laufwerk nach einer Datei suche und diese mit vollständigem Pfad in eine Textdatei speichere.

Diese eine Zeile in der Textdatei wird in einem weiteren Script als Variable verwendet.

Letztendlich soll die Variable (z.B. C:\Users\User\AppData\Local\Microsoft\Outlook\Outlook.pst) in eine Registrierungsdatei eingebunden werden, so dass diese von anderen Programmen gelesen werden kann.


Das Problem dabei ist, dass aus den \ ein \\ werden muss.

Wie kann ich das mit Batch mitteln bewerkstelligen?
Mitglied: Biber
20.01.2010 um 11:55 Uhr
Moin ForgottenAlmÖdi,

Demo am CMD-Prompt (">" an der ersten Stelle NICHT mit eingeben; ist mein Prompt):
(=11:51:28  D:\temp=) 
>set "pstPfad=C:\Users\User\AppData\Local\Microsoft\Outlook\Outlook.pst" 
 
(=11:51:53  D:\temp=) 
>echo set "regpstpfad=%pstpfad:\=\\%" 
set "regpstpfad=C:\\Users\\User\\AppData\\Local\\Microsoft\\Outlook\\Outlook.pst" 
In dem Beispiel werden mit
...%pstPfad:/=//%
.... alle einfachen Slashes (/) in der Variable %pstpfad% durch doppelte (2x/) ersetzt.

Probier damit anderthalb Minuten am CMD.Prompt.... dann hast du das Prinzip verstanden.

Grüße
Biber
Bitte warten ..
Mitglied: ForgottenRealm
20.01.2010 um 19:59 Uhr
Hi BibÖr

Danke, funktioniert super!


Allerdings habe ich jetzt ein weiteres Problem.

Ich möchte gerne eine Variable (wieder der Registrierungspfad) soweit ändern, dass die letzten 12 Zeichen (also "\Outlook.pst") entfernt werden, und ich nur den Pfad zum Ordner dort stehen habe.

Mit ... set path=%pstPfad:~-12% werden allerdings nur die Zeichen in der Variable gespeichert, die ich dort eben nicht mehr haben möchte.

Hast du dafür auch eine Lösung ?
Bitte warten ..
Mitglied: Biber
20.01.2010 um 20:11 Uhr
Moin ForgottenRealm,.

Zitat von ForgottenRealm:
Mit ... set path=%pstPfad:~-12% werden allerdings nur die Zeichen in der Variable gespeichert, die ich dort eben nicht mehr haben möchte.

Hast du dafür auch eine Lösung ?
ist der Papst katholisch?

Wieder am CMD-Prompt:
(=20:10:07  D:\temp=) 
>set "pstPfad=C:\Users\User\AppData\Local\Microsoft\Outlook\Outlook.pst" 
 
(=20:10:15  D:\temp=) 
>echo %pstpfad:~0,-12% 
C:\Users\User\AppData\Local\Microsoft\Outlook
Grüße
Biber

[Edit]
P.S. Evtl. ist es natürlich sinnvoller, nicht die letzten 12 oder 15 Stellen abzuschneiden... das ist nicht sonderlich variabel
Du kannst --weil es flexibler ist und das Gleiche kostet--- auch aus dem ausgelesenen alten Reg-Wert für Lw+Pfad+Anwendung.exe alles außer Anwendung.exe rausfrickeln.
[wieder Demo am CMD-Prompt]
 
>for %i in ("%pstpfad%") do @echo %~dpi 
C:\Users\User\AppData\Local\Microsoft\Outlook\
... und davon kannst du immer das letzte Zeichen (den Backslash) abschneiden und kompostieren.
[/Edit]
Bitte warten ..
Mitglied: ForgottenRealm
20.01.2010 um 20:50 Uhr
Die Zeile mit dem for %i in ("%pstpfad%") do @echo %~dpi funktioniert nicht so wie sie soll.

Ich bekomm da die Fehlermeldung: "pstpfad~dpi" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Bitte warten ..
Mitglied: Biber
20.01.2010 um 21:02 Uhr
Moin ForgottenRealm,

sorry, Missverständnis. Ich habe wieder die CMD-Prompt-proof-of-concept-Zeile gepostet.
So wie abgebildet (ohne das erste ">") funktioniert die am CMD-Prompt.
Du hast die as is als eine Batchzeile übernommen-- aber im Batch müssen vor die dynamischen (FOR-Anweisungs-)Variablen ZWEI Prozentzeichen.

CMD-Variante:
for %i in ("%pstpfad%") do @echo %~dpi

Batch Variante:
for %%i in ("%pstpfad%") do @echo %%~dpi

Wenn ich meine Demo-Halbzeile in eine Batch-Datei namens Onetemp.bat schreibe kann ich dein Ergebnis reproduzieren.
(=21:01:26  D:\temp=) 
>onetemp.bat 
"pstpfad~dpi" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Grüße
Biber
Bitte warten ..
Mitglied: ForgottenRealm
20.01.2010 um 21:36 Uhr
Ja so funktionierts

Allerdings hab ich nun auch noch ein anderes Problem bei der gesammten Datei;
01.
@Title Find Outlook 
02.
@echo OFF 
03.
 
04.
REM Optionen Finden 
05.
@set FILE=Outlook.pst 
06.
@set FINDLIST=Search_Outlook.txt 
07.
@set FINISH=Found_Outlook.txt 
08.
@set DRIVES=C 
09.
REM Optionen Registrierung anpassen 
10.
@set REGPATH=[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders] 
11.
@set STRINGNAME=Outlook 
12.
@set REGFILE=Outlook.reg 
13.
:: ------------------------------------------------------------------------------------------------ 
14.
 
15.
REM Löschen der temporären Dateien 
16.
@if exist %FINDLIST% @del /F /Q %FINDLIST% >NUL 
17.
@if exist %FINISH% @del /F /Q %FINISH% >NUL 
18.
@if exist %REGFILE% @del /F /Q %REGFILE% >NUL 
19.
 
20.
REM Durchsuchen aller Laufwerke 
21.
cls 
22.
@echo. 
23.
@echo Durchsuche Laufwerke nach Datei %FILE% ... 
24.
@echo. 
25.
 
26.
for %%i in (%DRIVES%) do ( 
27.
	@dir /S %%i:\ >> %FINDLIST% 
28.
29.
 
30.
REM Finden der Datei in Index 
31.
cls 
32.
@echo. 
33.
@echo Durchsuche Index nach Dateipfad ... 
34.
@echo. 
35.
 
36.
for /R "C:\" %%j in (%FILE%) do ( 
37.
	@if exist %%j @echo %%j> %FINISH% 
38.
39.
 
40.
REM Hinzufügen der gefundenen Informationen 
41.
cls 
42.
@echo. 
43.
@echo Fuege Dateipfad der Registrierung hinzu ... 
44.
@echo. 
45.
 
46.
REM Einlesen des gefundenen Pfades in Variable 
47.
@set /P PATH=<%FINISH% 
48.
 
49.
REM Entfernung der Datei 
50.
for %%i in ("%PATH%") do set PATH2=%%~dpi 
51.
@set PATH3=%PATH2:~0,-1% 
52.
 
53.
REM Umwandlung von \ in \\ 
54.
@set PATHFINISH=%PATH3:\=\\% 
55.
 
56.
REM Reg Add neu 
57.
REM Erstellung Registrierungsdatei 
58.
@echo Windows Registry Editor Version 5.00>>%REGFILE% 
59.
@echo.>>%REGFILE% 
60.
@echo %REGPATH%>>%REGFILE% 
61.
@echo.>>%REGFILE% 
62.
@echo "%STRINGNAME%"="%PATHFINISH%">>%REGFILE% 
63.
 
64.
@ping localhost -n 5>NUL 
65.
 
66.
REM Hinzufügen der Registrierunsdatei 
67.
@regedit /S %REGFILE% 
68.
 
69.
pause 
70.
 
71.
REM Reg Add alt 
72.
REM reg add "%REGPATH%" /v "%STRINGNAME%" /t REG_SZ /d "%PATH%" /f 
73.
 
74.
REM Löschen der temporären Dateien 
75.
REM @if exist %FINDLIST% @del /F /Q %FINDLIST% >NUL 
76.
REM @if exist %FINISH% @del /F /Q %FINISH% >NUL 
77.
REM @if exist %REGFILE% @del /F /Q %REGFILE% >NUL 
78.
 
79.
exit
An der Stelle, an der die Pause Funktion in Kraft tritt, scheinen Befehle wie ping, regedit, reg add ect nicht mehr zu funktionieren.

Woran liegt das ?


Weiterhin fällt mir grade noch auf, dass ich in der zweiten For-Schleife für die Laufwerke keine Variable habe, wie in der ersten. Wie kann ich die Laufwerke, auf denen nach der Outlook.pst gesucht werden soll, variabel halten ?
Bitte warten ..
Mitglied: Biber
20.01.2010 um 22:00 Uhr
Na ja, ForgottenRealm,

sagen wir so... in der Batchdatei stehen ja zwei angefangene Wege... einer für das Schreiben via Reg.exe, einer für RegEdit.exe.
Funktionieren würde beides, aber entscheide dich (meinetwegen per Münze) für EINEN Weg und trenne dich von den [meist ausgeREMten) Codetrümmern.

Denn dann spätestens wird dir auffallen, dass die zeitaufwändigste Operation in dem Schnipsel, die erste FOR-Anweisung in Zeile 36-38, eine Datei %FINISH% erzeugt, die nur noch zum Löschen gebraucht wird.

Dampfe erstmal den Schnipsel auf das zusammen, was vermutlich gebraucht wird, ich stehe dann morgen gern wieder zur Verfügung.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
20.01.2010 um 22:12 Uhr
Hallo ForgottenRealm!

Wenn Du davon ausgehst (und das tust Du zumindest implizit, indem Du nur die erste Zeile der Datei %FINISH% einliest), dass es nur eine einzige Fundstelle für %FILE% geben kann, dann lässt sich die ganze Sucherei ja auf etwas in der Art
01.
set "Pfad=" 
02.
for %%i in (%DRIVES%) do ( 
03.
    for /f "delims=" %%a in ('dir /S /B /A-D "%%i:\%FILE%"') do set "Pfad=%%a" 
04.
05.
if not defined Pfad echo "%FILE%" nicht gefunden! & goto :eof
reduzieren (OK, damit wird nicht, wie in Deiner Version, die erste, sondern die letzte passende Datei gefunden - aber wenn's eh nur eine ist ... ; zur Not geht's aber so ähnlich auch für die erste).

Wenn Dir an meinem Ansatz ev auffällt, dass ich nicht den Variablennamen %PATH% verwende, dann kann ich Dir versichern, dass das einen guten Grund hat - dadurch wird nämlich Deine Frage "Woran liegt das ?" gegenstandslos ...

Grüße
bastla

P.S.: Ich warte noch immer auf einen anderen guten Grund - nämlich jenen für die Verwendung eines allein stehenden "exit"
(Du musst Dich aber nicht speziell angesprochen fühlen - ich denke nur laut vor mich hin ...)
Bitte warten ..
Mitglied: ForgottenRealm
21.01.2010 um 09:58 Uhr
Danke bastla, damit funktionierts.

An die Geschichte mit der Path Variable hab ich gar nicht mehr gedacht, obwohl ich das Problem schon einmal hatte ...


Was das exit angeht;

Ich benutze oft mehrere Batch Dateien hintereinander, wobei die eine die andere aufruft und ohne ein Exit wird eine aufgerufene nicht von selber beendet.

Und bevor ich irgendwo ein Exit vergesse, auch wenn ich nicht weiss, ob ich die Datei später noch durch andere aufrufen will, mach ich lieber gleich überall ein Exit rein.
Bitte warten ..
Mitglied: bastla
21.01.2010 um 12:30 Uhr
Hallo ForgottenRealm!
ohne ein Exit wird eine aufgerufene nicht von selber beendet.
Kann ich nicht nachvollziehen - wenn ein "Folgebatch" gestartet, dessen Ende aber nicht abgewartet werden soll, einfach den Aufruf ohne ein "call" (also nur Name und ggf Pfad des nächsten Batches als "Befehl") eingeben ...

Grüße
bastla
Bitte warten ..
Mitglied: ForgottenRealm
21.01.2010 um 12:39 Uhr
Mag sein, dass das mit Call so ist, ich starte solche Batchdateien aber meistens mit Start, wegen der Parameter für minimieren, warten bis beendet und einstellung der Priorität .
Bitte warten ..
Mitglied: bastla
21.01.2010 um 16:16 Uhr
Hallo ForgottenRealm!
ich starte solche Batchdateien aber meistens mit Start
Ist ein Argument - und so gesehen wohl bequemer, "exit" zu verwenden, als beim Start ein "cmd /c" voranzustellen ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Batch & Shell
gelöst VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen) (5)

Frage von Luuke257 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mittels Batch jede Zeile einer Textdatei prüfen (4)

Frage von Peter32 zum Thema Batch & Shell ...

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

Frage von Xaero1982 zum Thema Microsoft ...

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

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...