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 Zeichen in Textdatei finden und ändern mit Batch

Mitglied: ForgottenRealm

ForgottenRealm (Level 1) - Jetzt verbinden

20.01.2010, aktualisiert 20:20 Uhr, 7120 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 ..
Ähnliche Inhalte
Batch & Shell
Batch zum ändern einer Textdatei
gelöst Frage von weboadmixBatch & Shell5 Kommentare

Hallo zusammen, suche hier etwas verzweifelt nach Hilfe, um mit einer Batchdatei eine Textdatei zu durchsuchen und eine Zeile ...

Batch & Shell

Per Batch Zeichen in Textdatei durch zeilenumbruch ersetzen

Frage von CreamyCewieBatch & Shell3 Kommentare

Hallo, ich habe folgende textdatei (test.txt) "þUEBERþNþSKZþBELþVARTþ3þaaþ5 þacþL þadþ20150385#umbr# UEBERþNþBELDATER" ich brauche nun ein Batch-Script welches mir die gesamte TXT-Datei ...

Batch & Shell

Entfernen eines Strings vor einem bestimmten Zeichens in einer Textdatei

gelöst Frage von Privex007Batch & Shell3 Kommentare

Hallo an alle Coder, ich habe Probleme mit dem extrahieren eines String aus einer "txt"-Datei. Ich habe folgende Zeilen ...

Batch & Shell

Linux: wie finde ich "unmögliche" zeichen in dateinamen?

gelöst Frage von klausphBatch & Shell5 Kommentare

guten tag nach stundenlangen studium von "dem kofler" und anderen grundlagenwerken weiss ich nicht weiter. es geht um folgendes: ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 10 StundenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 10 StundenSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 1 TagDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 1 TagSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
Exchange Server
Exchange Postfach Einbindung Betriebs-rat -Arzt, Bewerbung .
gelöst Frage von YellowcakeExchange Server22 Kommentare

Hey ich habe da mal eine Denksport Aufgabe bekommen Genutzt wird ein Exchange Server 2010. hier gibt es den ...

Datenschutz
Telematikinfrastruktur Erfahrungsaustausch
Frage von MOS6581Datenschutz12 Kommentare

Moin, unter meinen Kunden befinden sich auch einige Ärzte, welche sich künftig mit der Telematikinfrastruktur-Geschichte der Gematik herumärgern dürfen. ...

Windows Server
Delgegierte OU via RDP verwalten - Objektverwaltung zuweisen
gelöst Frage von TOAOICEWindows Server12 Kommentare

Hallo, ich habe folgendes Problem. Ich möchte in meiner Domäne (Server2016), einer Gruppe (OUAdmin) Berechtigungen auf die OU Test ...

Windows Server
Downgrade von Windows Server 2016 auf 2012 - Wie vorgehen?
Frage von EstefaniaWindows Server12 Kommentare

Guten Ich habe eine Frage an Erfahrene unter euch. Durch einen InPlace Upgrade wurde Windows Server 2012 auf die ...