lordofremixes
Goto Top

Script, das Textfiles untersucht und Textstellen automatisch ändert

Hallo zusammen,

ich habe hier folgendes Script (auch aus dem administrator.de Forum face-smile ):

@echo off & setlocal
set "Ordner=\\server1\profile\"  
set "Typ=txt"  
set "Von=www.Homepage_alt.com"  

set /a Anzahl=0
set R=%temp%\ReplaceIt.vbs
>%R% echo Set a=WScript.Arguments:Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(a(0)).ReadAll:fso.CreateTextFile(a(0)).Write Replace(T,a(1),a(2))  

for /f "delims=" %%i in ('dir /s /b /a-d *.%Typ%') do call :ProcessFile "%%i"  
echo %Anzahl% Dateien bearbeitet
pause
goto :eof

:ProcessFile
set "Nach=www.Homepage_neu.com"  

if not defined Nach echo Nicht bearbeitet: %1 & goto :eof

cscript //nologo %R% %1 "%Von%" "%Nach%"  
echo Bearbeitet: %1
set /a Anzahl+=1
goto :eof

In dem Script kann man oben den Texttyp angeben (txt, rtf, html, Zeile 3), den zu suchenden Text(Zeile 4), und den zu ersetzenden Text (Zeile 16).
Funktioniert wirklich gut, habe aber noch folgende Frage:

Die zu suchenden Dateien liegen alle in diesen Verzeichnissen:

\\server1\profile\test\Signaturen
\\server1\profile\test2\Signaturen
\\server1\profile\test3\Signaturen
\\server1\profile\test4\Signaturen
\\server1\profile\test5\Signaturen
\\server1\profile\test6\Signaturen

Das Script, das mir jetzt vorliegt, durchsucht aber dann auch Ordner wie z.B.

\\server\profile\test6\Word-Dokumente und ändert da dann natürlich auch die Textstellen..

Wie bekomme ich es hin, dass das Script nur die Ordner Signaturen durchsucht und ändert und alle Unterordner \\server\profile\.. auslässt (also wirklich nur Änderungen in den Ordnern Signaturen)?

Bitte um Hilfe!

Gruß
lordofremixes

Content-ID: 233459

Url: https://administrator.de/contentid/233459

Ausgedruckt am: 24.11.2024 um 03:11 Uhr

TsukiSan
TsukiSan 24.03.2014 um 10:02:00 Uhr
Goto Top
Hallo lordofremixes,

wenn du in der Kommandozeile einmal
dir /?
eingibst, dann siehst du, welchen Buchstaben du oben in deiner Schleife rausnehmen musst, damit keine Unterverzeichnisse durchsucht werden.

Gruss
Tsuki
bastla
bastla 24.03.2014 um 12:05:05 Uhr
Goto Top
Hallo lordofremixes!

Im einfachsten Fall könntest Du dem "dir" einen passenden Filter hinzufügen, etwa:
for /f "delims=" %%i in ('dir /s /b /a-d *.%Typ%^|findstr /i "Signaturen"') do call :ProcessFile "%%i"
Damit werden nur Dateipfade verwendet, die "Signaturen" enthalten - könnte allerdings auch im Namen der Datei sein.

Als exaktere Alternative dazu könntest Du geschachtelte "for /d"-Schleifen verwenden, um zunächst alle "\\server1\profile\test*"-Ordner zu erhalten und darin dann nur die "Signaturen"-Ordner verarbeiten ...

Grüße
bastla
lordofremixes
lordofremixes 24.03.2014 um 16:18:24 Uhr
Goto Top
Hallo bastla,

habe jetzt folgendes Script:

@echo off & setlocal
set "Ordner=D:\TSProfile\Test\"  
set "Typ=txt"  
set "Von=www.AlteHomepage.com"  

set /a Anzahl=0
set R=%temp%\ReplaceIt.vbs
>%R% echo Set a=WScript.Arguments:Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(a(0)).ReadAll:fso.CreateTextFile(a(0)).Write Replace(T,a(1),a(2))  

for /f "delims=" %%i in ('dir /s /b /a-d *.%Typ%^|findstr /i "Signatures"') do call :ProcessFile "%%i"  
echo %Anzahl% Dateien bearbeitet
pause
goto :eof

:ProcessFile
set "Nach=www.NeueHomepage.com"  

if not defined Nach echo Nicht bearbeitet: %1 & goto :eof

cscript //nologo %R% %1 "%Von%" "%Nach%"  
echo Bearbeitet: %1
set /a Anzahl+=1
goto :eof

Er bringt mir jetzt aber die ganze Zeit Fehlermeldungen:

Bearbeitet: "D:\TSProfile\Test\sf.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures\  
goethe.txt"  
Bearbeitet: "D:\TSProfile\Test\sf.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures\  
sf.txt"  
Bearbeitet: "D:\TSProfile\Test\sf.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures\  
sfprivat.txt"  
C:\Users\ADMINI~1.BEP\AppData\Local\Temp\2\ReplaceIt.vbs(1, 76) Laufzeitfehler i
n Microsoft VBScript: Eingabe hinter Dateiende.

Bearbeitet: "D:\TSProfile\Test\sfr.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\sfr.txt"  
Bearbeitet: "D:\TSProfile\Test\sfr.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\sfr_m.txt"  
C:\Users\ADMINI~1.BEP\AppData\Local\Temp\2\ReplaceIt.vbs(1, 76) Laufzeitfehler i
n Microsoft VBScript: Eingabe hinter Dateiende.

Bearbeitet: "D:\TSProfile\Test\sgr.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\sgr.txt"  
C:\Users\ADMINI~1.BEP\AppData\Local\Temp\2\ReplaceIt.vbs(1, 76) Laufzeitfehler i
n Microsoft VBScript: Eingabe hinter Dateiende.

Bearbeitet: "D:\TSProfile\Test\sgr.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\sgr_Alpine.txt"  
Bearbeitet: "D:\TSProfile\Test\si.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures\  
rr.txt"  
Bearbeitet: "D:\TSProfile\Test\si.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures\  
si.txt"  
Bearbeitet: "D:\TSProfile\Test\ski.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\ski.txt"  
Bearbeitet: "D:\TSProfile\Test\ski.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\ski_m.txt"  
C:\Users\ADMINI~1.BEP\AppData\Local\Temp\2\ReplaceIt.vbs(1, 76) Laufzeitfehler i
n Microsoft VBScript: Eingabe hinter Dateiende.

Bearbeitet: "D:\TSProfile\Test\sro.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\sro.txt"  
C:\Users\ADMINI~1.BEP\AppData\Local\Temp\2\ReplaceIt.vbs(1, 76) Laufzeitfehler i
n Microsoft VBScript: Eingabe hinter Dateiende.

Bearbeitet: "D:\TSProfile\Test\ssc.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\ssc.txt"  
Bearbeitet: "D:\TSProfile\Test\stae.TestDomaene.V2\AppData\Roaming\Microsoft\Signature  
s\stae.txt"  
Bearbeitet: "D:\TSProfile\Test\svh.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\svh.txt"  
Bearbeitet: "D:\TSProfile\Test\swe.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\swe.txt"  
Bearbeitet: "D:\TSProfile\Test\tba.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\tba.txt"  
Bearbeitet: "D:\TSProfile\Test\tba.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\tba_m.txt"  
Bearbeitet: "D:\TSProfile\Test\tbr.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\tbr.txt"  
Bearbeitet: "D:\TSProfile\Test\tbr.TestDomaene.V2\AppData\Roaming\Microsoft\Signatures  
\tbr_m.txt"  
20 Dateien bearbeitet
Drücken Sie eine beliebige Taste . . .

Kannst du dir das erklären? Und wieso kommt eigentlich, wenn ich die Datei nocheinmal ausführe, wieder die Meldung, dass er 20 Dateien bearbeitet hat?

Hast du dafür eine Erklärung?

Gruß
lordofremixes
lordofremixes
lordofremixes 24.03.2014 um 16:24:17 Uhr
Goto Top
Und komischerweise passiert dies nur, wenn der Texttyp auf txt steht,
bei rtf oder htm meckert er nicht rum..
bastla
bastla 24.03.2014 aktualisiert um 18:30:39 Uhr
Goto Top
Hallo lordofremixes!
Und komischerweise passiert dies nur, wenn der Texttyp auf txt steht,
Vermutlich gibt es nur Textdateien mit einer Größe von 0 Byte ...

Wird's besser, wenn Du Zeile 20 durch
if %~z1 neq 0 cscript //nologo %R% %1 "%Von%" "%Nach%"
ersetzt?

Grüße
bastla