1.2k Aufrufe
Gefragt in Anwendungen(Java,C++...) von
Hallo
das Skript https://supportnet.de/fresh/2007/6/id1560839.asp funktioniert bei mir einwandfrei, aber wie müsste es denn aussehen, wenn diese test.txt Datei in mehreren Unterverzeichnissen vorkommen kann und die test1.txt jeweils in das entsprechende Unterverzeichnis abgespeichert werden soll?
Danke und viele Grüsse
koa

4 Antworten

0 Punkte
Beantwortet von
Hallo, das ist schön, dass du dir was ausgesucht hast, aber es wäre wesentlich besser, wenn du deine Batch hier posten würdest.
Vor allem die Pfade, die Verzeichnisstruktur zeigen.
Hauptverzeichnis
|___Unterverzeichnis 1
| |___test1.txt
|
|___Unterverzeichnis 2
| |___test2.txt


Gruß
0 Punkte
Beantwortet von gresti Experte (1.8k Punkte)
01.
@echo off & setlocal enabledelayedexpansion
02.
set "Datei=D:\Test.txt"
03.
set "Liste=D:\Ersetzungsliste.txt"
04.

05.
set "t=%temp%\text.tmp"
06.
if exist "%t%" del "%t%"
07.
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" &
call :ProcessLine
08.
move "%t%" "%Datei%"
09.
goto :eof
10.

11.
:ProcessLine
12.
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"
13.
if not defined L >>"%t%" echo\& goto :eof
14.
for /f "usebackq tokens=1-2 delims=;" %%s in ("%Liste%") do set
"L=!L:%%s=%%t!"
15.
>>"%t%" echo %L%
16.
goto :eof
0 Punkte
Beantwortet von
Hallo und Danke für die ersten Antworten.
Was ich brauche ist ein Skript für die folgende Aufgabe


Exportverzeichnis---->suchen_und_ersetzen.bat
|
|
|
|___Stapelverzeichnis001
| |___index.txt
|
|
|___Stapelverzeichnis002
| |___index.txt
|
|
|___Stapelverzeichnis00n
| |___index.txt


Also im Exportverzeichnis soll eine bat-Datei liegen, die in allen Unterverzeichnissen (Stapelverzeichnis001 bis 00n) in der index.txt $$$ mit ; ersetzt und anschliessend die Datei jeweils in index.csv umbenennt


Das Umbenennen funktioniert mit folgendem Script

echo off
;Schritt 1: es wird eine Liste aller Dateien index.txt erstellt inklusive der Unterordner (Option: /S) (Option: /B, nur der Komplette Dateipfad)
dir index.txt /B /S >Liste.txt
;Schritt2: Eine For-Schleife durchsucht die Datei Zeilenweise, die Zeilen werden in der Laufzeitvariable %%i gespeichert, befehl ren macht den Rest.
FOR /F "delims=" %%i in (Liste.txt) do ren "%%i" "index.csv"


Was ich mir vorstelle/wünsche ist vielleicht dieses Script in 3 Schritte zu gliedern


echo off
;Schritt 1: es wird eine Liste aller Dateien index.txt erstellt inklusive der Unterordner (Option: /S) (Option: /B, nur der Komplette Dateipfad)
dir index.txt /B /S >Liste.txt

;Schritt2: Eine For-Schleife durchsucht die Datei Liste.txt und ersetzt in den index.txt Dateien $$$ durch ;


;Schritt3: Eine For-Schleife durchsucht die Datei Liste.txt Zeilenweise, die Zeilen werden in der Laufzeitvariable %%i gespeichert, befehl ren macht den Rest.
FOR /F "delims=" %%i in (Liste.txt) do ren "%%i" "index.csv"


Danke Euch schon mal im Voraus für Eure Geduld und Mühe bei der Entwicklung des Schrittes No 2.

Viele Grüsse


koa
0 Punkte
Beantwortet von massaraksch Experte (3.1k Punkte)
Mit Powershell (ab Windows 7 dabei, bei XP/Vista installierbar) wäre das relativ übersichtlich:

Script "suchen-und-ersetzen.ps1"
$files = get-childitem -Include index.txt -Recurse

if ($files -eq $empty) { Return }

foreach ($f in $files) {
(get-content $f) | foreach { $_ -replace '\$\$\$', ';' } | set-content $f
rename-item $f -NewName ($f.BaseName + '.csv')
}

Grob:
Zuerst die Dateiobjekte mit Namen "index.txt" rekursiv suchen und in Variable $files speichern.

Falls keine gefunden, dann Beenden.

Dann für jede Datei $f aus $files den Inhalt lesen, Zeichenfolge ersetzen ($$$ muß hier "maskiert" werden mit \$\$\$, weil es sonst als ein sog. "special character" der Shell erkannt wird), den neuen Inhalt speichern und die geänderte Datei umbenennen.

Mit Batch/CMD.EXE wäre mir das viel zu frickelig ;o)

mfg, Massaraksch
...