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, 4933 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
Humor (lol)
(Part num your Hacked phone. +XX XXXXXX5200)
Erfahrungsbericht von Henere vor 2 TagenHumor (lol)4 Kommentare

Mein Handy hat aber ne ganz andere Endnummer. Muss ich mir jetzt Sorgen machen ? :-) Vielleicht betrifft es ...

Exchange Server

Letztes Update für Exchange 2016 CU9 war in gewisser Weise destruktiv

Erfahrungsbericht von DerWoWusste vor 2 TagenExchange Server6 Kommentare

Kurzer Erfahrungsbericht zu Exchange2016-KB4340731-x64 Der Exchangeserver hat wie gewöhnlich versucht, es in der Nacht automatisch zu installieren - abgesehen ...

Erkennung und -Abwehr

Neue Sicherheitslücke Foreshadow (L1TF) gefährdet fast alle Intel-Prozessoren

Information von Frank vor 3 TagenErkennung und -Abwehr3 Kommentare

Eine neue Sicherheitslücke, genannt Foreshadow (alias L1TF) wurde auf der Usenix Security 18 von einem Team internationaler Experten veröffentlicht. ...

Vmware
VMware Updates gegen L1 Lücke
Information von sabines vor 3 TagenVmware

Für die Vmware Produkte vCenter Server, ESXi, Workstation und Fusion stehe Updates bereit um die L1 Lücke zu schließen. ...

Heiß diskutierte Inhalte
Netzwerke
Netzwerk-Architektur mit VLANs
Frage von niLuxxNetzwerke25 Kommentare

Liebe Community, Ich hätte eine kurze Frage an euch. Ich werde in Kürze das Netzwerk unserer (sehr) kleinen Firma ...

Windows Server
WSUS nach Upgrade - kein Start mehr
gelöst Frage von Ghost108Windows Server9 Kommentare

Hallo zusammen, habe einen Windows Server 2012 welcher als WSUS dienst. Jetzt wurde ein Upgrade auf Server 2016 durchgeführt ...

Netzwerke
SSH - Wieso werde ich nach VPN Verbindung rausgeschmissen?
Frage von VernoxVernaxNetzwerke9 Kommentare

Hallo, ich habe es endlich geschafft mein Handy mit einer VPN Verbindung an meinen Router anzuschließen. Nach der Login ...

Microsoft
Ist es möglich ein reines Volume C Datenbackup in eine Hyper-V VM zu konvertieren?
Frage von Frank84Microsoft8 Kommentare

Hallo zusammen, ich habe hier ein Backup vorliegen, das ausschließlich das komplette C:\ Volume eines physischen Server 2012 enthält. ...