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 Inhalt von Dateien in einem Verzeichnis ändern

Mitglied: Eizbaer

Eizbaer (Level 1) - Jetzt verbinden

16.04.2008, aktualisiert 18.04.2008, 4929 Aufrufe, 28 Kommentare

Da ich noch nie eine schleife programmiert habe brauche ich eure Hilfe.

Eine Datei alleine kann ich verändern:

@echo off
setlocal enabledelayedexpansion
set "filename=index_1.php"
set "tempfile=tmptxt.txt"
for /F "delims=" %%a in (%filename%) do (
set text=%%a
set text=!text:.pdf=.dxf!
echo !text!>>%tempfile%
)
del %filename%
ren %tempfile% %filename%



Ich möchte aber gerne alle Dateien mit index_*.php verändern die in einem Verzeichnis liegen.

Danke im Vorraus für eure Hilfe
28 Antworten
Mitglied: 54487
16.04.2008 um 12:52 Uhr
Wenn ich das richtig verstehe, willst du den Dateien lediglich eine andere Endung verpassen?

Dazu reicht ein Einzeiler: ren index_?.php index_?.dxf

Sollte ich das falsch verstehen, bitte mal erläutern, was du eigentlich erreichen willst.
Bitte warten ..
Mitglied: Eizbaer
16.04.2008 um 12:57 Uhr
nein, im Verzeichnis liegen die Dateien index_1.php index_2.php index_3.php etc. und alle sollen nach der Inhaltsänderung wieder so heißen wie vorher
Bitte warten ..
Mitglied: bastla
16.04.2008 um 13:49 Uhr
Hallo Eizbaer und willkommen im Forum!

Mit Schleife über alle passenden Dateien sollte das (allerdings ungetestet) so gehen:
01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
set "tempfile=tmptxt.txt" 
04.
 
05.
for %%i in (index_*.php) do ( 
06.
	for /F "delims=" %%a in (%%i) do ( 
07.
		set text=%%a 
08.
		set text=!text:.pdf=.dxf! 
09.
		echo !text!>>%tempfile% 
10.
11.
	del %%i 
12.
	ren %tempfile% %%i 
13.
)
Etwas komprimierter:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "tempfile=tmptxt.txt" 
03.
 
04.
for %%i in (index_*.php) do ( 
05.
	for /F "delims=" %%a in (%%i) do ( 
06.
		set text=%%a 
07.
		echo !text:.pdf=.dxf!>>%tempfile% 
08.
09.
	move %tempfile% %%i 
10.
)
Grüße
bastla
Bitte warten ..
Mitglied: Eizbaer
17.04.2008 um 09:46 Uhr
super das klappt, aber leider nicht mein Ursprungsscript.

Wenn eine Zeile gefunden wird mit nur Leerzeichen, dann wird "ECHO ist ausgeschaltet (OFF). in dieser geschrieben.

Wie kann ich dieses umgehen?
Bitte warten ..
Mitglied: bastla
17.04.2008 um 09:49 Uhr
Hallo Eizbaer!

01.
echo\!text!>>%tempfile%
Grüße
bastla
Bitte warten ..
Mitglied: Eizbaer
17.04.2008 um 10:01 Uhr
super das klappt.

Noch ein Problem in der neuen Datei sind alle ! (Ausrufungszeichen gelöcht), wie kann das sein?
Bitte warten ..
Mitglied: bastla
17.04.2008 um 10:12 Uhr
Hallo Eizbaer!

Das liegt an der "delayedexpansion" - die braucht die "!" als Ersatz für "%" und kann sie daher nicht mehr als gewöhnliche Zeichen darstellen.

Ansatz ohne "delayedexpansion":
01.
@echo off & setlocal 
02.
set "tempfile=tmptxt.txt" 
03.
 
04.
for %%i in (index_*.php) do ( 
05.
	for /F "delims=" %%a in (%%i) do set "text=%%a" & call :ProcessLine 
06.
	move %tempfile% %%i 
07.
08.
goto :eof 
09.
 
10.
:ProcessLine 
11.
echo %text:.pdf=.dxf%>>%tempfile% 
12.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Eizbaer
17.04.2008 um 14:23 Uhr
Danke aber ich bin zu blond dafür

ich verstehe nicht wohin goto :eof führen soll.

Ich werde doch einen profi dran lassen müssen
Bitte warten ..
Mitglied: 54487
17.04.2008 um 14:29 Uhr
eof ist eine vordefinierte Sprungmarke für EndOfFile

Am Ende von ProcessLine allerdings m. E. überflüssig.
Bitte warten ..
Mitglied: Eizbaer
17.04.2008 um 14:47 Uhr
es wird leider keine tmptxt.txt datei erzeugt
Bitte warten ..
Mitglied: 54487
17.04.2008 um 14:49 Uhr
Ohne das jetzt nachzuvollziehen (ich habe schon mal .php und .pdf verwechselt ):
durch "move %tempfile% %%i" wird die tmptxt.txt ja auch verschoben (umbenannt), also ist sie auch nicht mehr vorhanden.
Bitte warten ..
Mitglied: Eizbaer
17.04.2008 um 14:51 Uhr
es wird keine tmptxt.txt erzeugt, der move befehl gibt ja fehlermeldung aus, das keine datei existiert
Bitte warten ..
Mitglied: bastla
17.04.2008 um 15:22 Uhr
@54487
eof ist eine vordefinierte Sprungmarke für EndOfFile
Am Ende von ProcessLine allerdings m. E. überflüssig.
Stimmt; allerdings habe ich es mir angewöhnt, diese (nicht störende) Zeile trotzdem zu verwenden, da gelegentlich ein Batch vom Fragesteller in Eigenregie noch um weitere Unterprogramme ergänzt wird - spätestens dann wird das definierte Ende dieses Unterprogrammes benötigt.

@Eizbaer
Das erste "goto :eof" stellt sicher, dass das Unterprogramm nicht nach Bearbeitung aller passenden PHP-Dateien nochmals ausgeführt wird.

Grüße
bastla
Bitte warten ..
Mitglied: bastla
17.04.2008 um 15:29 Uhr
@Eizbaer

Ändere bitte "echo off" auf "echo on" und starte den Batch dann von der Kommandozeile mit
01.
Batchname>Log.txt
Die so erstellte Datei "Log.txt" enthält dann den Ablauf, wobei jeder Befehl vor seiner Ausführung zunächst angezeigt wird.

Wenn Du selbst nicht daraus schlau werden solltest (eine Permanentblondierung wird's ja wohl nicht sein ) , poste den Inhalt der Log-Datei.

Sinnvoll wird es natürlich sein, zum Testen zB nur 3 PHP-Dateien zu verwenden.

Grüße
bastla
Bitte warten ..
Mitglied: Eizbaer
17.04.2008 um 15:44 Uhr
set "text=<!DOCTYPE HTML PUBLIC " -W3CDTD HTML 4.01 Transitiona lEN">" & call :ProcessLine
">" ist syntaktisch an dieser Stelle nicht verarbeitbar.


Orginaltext:
<!DOCTYPE HTML PUBLIC "-
W3 CDTD HTML 4.01 TransitionalEN">
Bitte warten ..
Mitglied: 54487
17.04.2008 um 15:47 Uhr
Orginaltext:
<!DOCTYPE HTML PUBLIC " -W3CDTD HTML 4.01 Transitional//EN">

Aua. Wobei sich mir die Frage aufdrängt, was diese Zeile in einer .php-Datei zu suchen hätte.
Bitte warten ..
Mitglied: Eizbaer
17.04.2008 um 15:59 Uhr
Aber die Endung "> kommt leider öffter vor !
Bitte warten ..
Mitglied: 54487
17.04.2008 um 16:03 Uhr
Aber die Endung "> kommt leider öffter vor !

Schon klar. Da muss bastla ran. ;)

Wäre da nicht ein simpler Editor mit Search&Replace-Funktion einfacher, z. B. EditPad ?
Bitte warten ..
Mitglied: Eizbaer
17.04.2008 um 16:05 Uhr
naja, wenn man da mehrere Änderungen per script gleichzeitig machen könnte, dann ja
Bitte warten ..
Mitglied: 54487
17.04.2008 um 16:07 Uhr
Bitte warten ..
Mitglied: bastla
17.04.2008 um 17:03 Uhr
@Eizbaer und nachdenker!

Unter diesen Voraussetzungen weiter mit Batch herumzuspielen, halte ich für nicht sinnvoll - zumindest, wenn es nur Batch sein soll - daher lassen wir die reine Ersetzungsarbeit doch von einem VBScript erledigen (damit bleiben dann sogar die Leerzeilen dort, wo sie auch vorher schon waren ):
01.
@echo off & setlocal 
02.
set "R=%temp%\Repl.vbs" 
03.
echo F=WScript.Arguments(0):Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll:fso.CreateTextFile(F,True).Write Replace(T,".pdf",".dxf")>%R% 
04.
 
05.
for %%i in (index_*.php) do cscript //nologo %R% "%%~i"
Grüße
bastla
Bitte warten ..
Mitglied: Eizbaer
18.04.2008 um 07:34 Uhr
VBScript ist ganz neu für mich )

diese Datei nenne ich dann xxx.vbs? und kann sie dann abspielen?

Wenn Ja dann kommt Fehlermeldung

Zeile: 2
Fehler: '='erwartet
Code: 800A03F3
Bitte warten ..
Mitglied: bastla
18.04.2008 um 07:43 Uhr
Hallo Eizbaer!

Nein - ist weiterhin ein Batch (der sich das benötigte Script selbst erzeugt und aufruft).

Grüße
bastla
Bitte warten ..
Mitglied: Eizbaer
18.04.2008 um 07:57 Uhr
das klappt super, danke


kann man mit den vbs auch z.B. 2 sachen gleichzeitig verändern?

z.B. .pdf ind .dxf und .php in .htm ?
Bitte warten ..
Mitglied: bastla
18.04.2008 um 08:47 Uhr
Hallo Eizbaer!

Wenn's nur noch eine zweite Ersetzung sein soll, mogle ich die noch dazu:
01.
@echo off & setlocal 
02.
set "R=%temp%\Repl.vbs" 
03.
echo F=WScript.Arguments(0):Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll:fso.CreateTextFile(F,True).Write Replace(Replace(T,".pdf",".dxf"),".php",".htm")>%R% 
04.
 
05.
for %%i in (index_*.php) do cscript //nologo %R% "%%~i"
Grüße
bastla
Bitte warten ..
Mitglied: Eizbaer
18.04.2008 um 09:02 Uhr
Super

Schön, was nur bei 2-3 sinn macht, ich habe aber leider 9

Wobei ich das jetzt auch damit geschafft habe



kann man auch 2 Dateiendungen gleichzeitig editieren?
Bitte warten ..
Mitglied: bastla
18.04.2008 um 11:40 Uhr
Hallo Eizbaer!

Zumindest für's nächste Mal die Version für multiple Ersetzungen und mehrere Dateitypen:
01.
@echo off & setlocal 
02.
set "R=%temp%\Repl.vbs" 
03.
 
04.
echo P=Split(".pdf=.dxf;.php=.htm",";")>%R% 
05.
 
06.
echo U=UBound(P):For i=0 To U:P(i)=Split(P(i),"="):Next:F=WScript.Arguments(0)>>%R% 
07.
echo Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll>>%R% 
08.
echo For i=0 To U:T=Replace(T,P(i)(0),P(i)(1)):Next:fso.CreateTextFile(F,True).Write T>>%R% 
09.
 
10.
for %%i in (index_*.php) do cscript //nologo %R% "%%~i" 
11.
for %%i in (index_*.htm) do cscript //nologo %R% "%%~i"
Die einzelnen Ersetzungspaare sind jeweils nach dem Muster "Von=Nach", durch ";" getrennt, in der Zeile "echo P=Split(..." einzutragen. Sollte das Trennzeichen selbst Teil eines Textes sein, kannst Du auch ein anderes (zB "#") wählen, also die Zeile etwa so schreiben:
01.
echo P=Split(".pdf=.dxf#.php=.htm","#")>%R%
Für mehrere zu bearbeitende Dateiendungen kannst Du die letzte Zeile kopieren und das Dateimuster in der Klammer jeweils anpassen.

Grüße
bastla
Bitte warten ..
Mitglied: Eizbaer
18.04.2008 um 13:17 Uhr
jetzt Funktioniert alles,

ich danke euch für eure Hilfe
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Inhalt von XML-Dateien ändern
gelöst Frage von Kedi123Batch & Shell14 Kommentare

Hallo zusammen, wir haben täglich viele XML-Dateien, die unter anderem jeweils eine Festplattengröße in Byte enthalten (Zeile 16). Um ...

VB for Applications

Inhalt einer XML Datei Script ändern

gelöst Frage von chris27584VB for Applications4 Kommentare

Hallo zusammen, in folgendem Script <?xml version="1.0"?> -<SkClientConfig xmlns:xsi=" xmlns:xsd=" <LastServerIndex>1</LastServerIndex> <LastUser>11111</LastUser> <LastWorkplace>2358</LastWorkplace> -<SerializableFont> <FontValue>Microsoft Sans Serif; 8,25pt</FontValue> </SerializableFont> ...

Batch & Shell

Suche ersetzten Inhalt Datei aus gesamten Verzeichnis

Frage von thomas1972Batch & Shell3 Kommentare

Guten Abend, Ich habe folgendes Problem. In einem Verzeichnis liegen x Textdateien, nun möchte ich in den Dateien gewisse ...

Batch & Shell

Powershell: Verzeichnis auf hidden setzen (nicht Inhalt)

gelöst Frage von DanielBodenseeBatch & Shell2 Kommentare

Hallo, ich suche nach einer kurzen Lösung um zu prüfen das ein Verzeichnis auf dem Desktop existiert und dieses ...

Neue Wissensbeiträge
Administrator.de Feedback

Entwicklertagebuch: Datenschutzerklärung nach DS-GVO

Information von admtech vor 1 StundeAdministrator.de Feedback

Hallo Administrator User, Wir respektieren eure Privatsphäre und möchten euch daher auf die Möglichkeiten für den Umgang mit euren ...

Voice over IP

Rufnummernblock aufbrechen nun möglich bei DTAG

Tipp von Datenreise vor 5 StundenVoice over IP

Bei der Telekom ist es seit einigen Tagen laut Aussage der Geschäftskunden-Hotline möglich, eine Rufnummernübernahme auch dann durchzuführen, wenn ...

Netzwerke
Riesiges Botnetz in Deutschland
Tipp von FFSephiroth vor 7 StundenNetzwerke1 Kommentar

Überprüft mal eure Router und NAS

Soziale Netzwerke

Freitag, der 25.05 - Facebook baut weltgrößtes P.ähm Antip.archiv der Welt auf

Information von certifiedit.net vor 8 StundenSoziale Netzwerke3 Kommentare

Guten Morgen, da fragt man sich doch allen ernstes, was Facebook damit bezwecken möchte, ich tippe ja darauf, dass ...

Heiß diskutierte Inhalte
HTML
Link nicht vollständig
Frage von jensgebkenHTML33 Kommentare

Hallo Gemeinschaft, ich erstelle mit Word einen Serienbrief, den ich per Mail versende. Nun mein Problem der Wordserienbrief holt ...

Datenschutz
E-Mail Verschlüsselung DSGVO 2018
gelöst Frage von SoccerdeluxDatenschutz33 Kommentare

Hallo zusammen, ich verzweifele langsam und wende mich an euch und hoffe vielleicht ein paar Antworten zu finden. Ich ...

Server-Hardware
HPE DL 360e GEN8 - P420 - Lüfter drehen auf nach Festplattenwechsel
Frage von maniacmacpainServer-Hardware20 Kommentare

Hallo, ich kenne den Effekt, dass man bei der GEN8 von HP ein Array eingerichtet haben muss, damit die ...

Server-Hardware
ILO4 auf HP DL20 Gen9 deaktivieren
Frage von it-fraggleServer-Hardware16 Kommentare

Hallo, es ist zum verrückt werden. Auf dem Server lässt sich iLO nicht abschalten. Das Problem hatte ich schon ...