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-Key: 233459

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

Printed on: April 18, 2024 at 17:04 o'clock

Member: TsukiSan
TsukiSan Mar 24, 2014 at 09:02:00 (UTC)
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
Member: bastla
bastla Mar 24, 2014 at 11:05:05 (UTC)
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
Member: lordofremixes
lordofremixes Mar 24, 2014 at 15:18:24 (UTC)
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
Member: lordofremixes
lordofremixes Mar 24, 2014 at 15:24:17 (UTC)
Goto Top
Und komischerweise passiert dies nur, wenn der Texttyp auf txt steht,
bei rtf oder htm meckert er nicht rum..
Member: bastla
bastla Mar 24, 2014 updated at 17:30:39 (UTC)
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