Batch-datei: brauch Hilfe!

Baster

Neu angemeldet
Registriert
5 Apr. 2015
Beiträge
68
ich bräuchte mal eine batch-datei
ich hoffe, da kann mir jemand von euch helfen, ist von großer wichtigkeit.

also: ein Ordner (Log-files) muss verschoben werden. vorher soll in alle .log files einem String suchen und
die Zeile, die ihn enthält, durch eine andere Zeile ersetzen.
[src=bash] @echo off
SETLOCAL=ENABLEDELAYEDEXPANSION

rename *.log *.tmp
for /f %%a in (log.tmp) do (
set foo=%%a
if !foo!=die-original-Zeil set foo=die-neue-zeile
echo !foo! >> *.log)
del .*tmp[/src]
ich brauch also eine schleife, welche besagt, dass alle log dateien im Ordner (Log-files) bearbeitet/editiert wird.
sobald der prozess beendet ist, Verschiebe den Ordner (Log-files) nach pfad x

vielen Dank schonmal für eure mühe^^
 
Hm, dir fehlt doch nur die Schleife die alle *.log durch geht oder?

Batch ist aber eigentlich eh veraltet :D
In Powershell könnte das so aussehen

[src=powershell]
$logfolder = "c:\Temp"
$targetfolder= "c:\Alt"
$old = "TEST"
$new = "Ersetzt!"

Get-ChildItem $logfolder -Filter *.log | Foreach-Object{
Get-Content $_.FullName |Foreach-Object{$_.Replace($old,$new)}|Set-Content "$targetfolder\$_.Name"
Remove-Item $_.Fullname
}
}[/src]

--- [2015-11-26 22:15 CET] Automatisch zusammengeführter Beitrag ---

Und der Vollständigkeit halber noch als .bat

[src=bash] @echo off
SETLOCAL=ENABLEDELAYEDEXPANSION
Set SourceVerzeichnis=C:\Verzeichnis
Set ZielVerzeichnis=C:\VerzeichnisNeu
For /F "Tokens=*" %%f in ('Dir /b "%SourceVerzeichnis%\*.Log"') Do (
For /f "Tokens=* usebackq" %%a in ("%SourceVerzeichnis%\%%f") do (
Set foo=%%a
If !foo!==die-original-Zeil Set foo=die-neue-zeile
Echo !foo!>>"%ZielVerzeichnis%\%%f")
del "%SourceVerzeichnis%\%%f"
)[/src]
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #4
Danke drfuture
entschuldige bitte die späte antwort

es funktioniert soweit "fast" perfekt"

1-wie kann man alle files im ordner verschieben, momentan werden nur die Log-files verschoben,
2- del "%SourceVerzeichnis%\%%f" funktioniert nicht
3-wie kann ich "SourceVerzeichnis" und "ZielVerzeichnis" als variable setzen?

SourceVerzeichnis und .bat file sind immer im selben ordner.
Set SourceVerzeichnis= " %cd% " hat nicht funktioniert.
Ich hatte mir das so überlegt, dass das Zielverzeichnis gesucht werden soll , und der pfad als Variable speichern.

so sieht meine momentane .bat file

[src=bash]@echo off
SETLOCAL=ENABLEDELAYEDEXPANSION
Set SourceVerzeichnis=C:\Users\Baster\Desktop\Meine Logs
Set ZielVerzeichnis=C:\Backup\Logfiles
RENAME log Log
RENAME "C:\Backup\Logfiles\Log" "Log-back"
For /F "Tokens=*" %%f in ('Dir /b "%SourceVerzeichnis%\*.Log"') Do (
For /f "Tokens=* usebackq" %%a in ("%SourceVerzeichnis%\%%f") do (
Set foo=%%a
If !foo!==die-original-Zeil Set foo=die-neue-zeile
Echo !foo!>>"%ZielVerzeichnis%\%%f")
del "%SourceVerzeichnis%\%%f"

)[/src]

vielen Dank schonmal für eure mühe
 
[src=bash]@echo off
SETLOCAL=ENABLEDELAYEDEXPANSION
Set SourceVerzeichnis=%~dp0
Set ZielVerzeichnis=C:\Backup\Logfiles
RENAME log Log
RENAME "C:\Backup\Logfiles\Log" "Log-back"
For /F "Tokens=*" %%f in ('Dir /b "%SourceVerzeichnis%\*.Log"') Do (
For /f "Tokens=* usebackq" %%a in ("%SourceVerzeichnis%\%%f") do (
Set foo=%%a
If !foo!==die-original-Zeil Set foo=die-neue-zeile
Echo !foo!>>"%ZielVerzeichnis%\%%f")
del "%SourceVerzeichnis%\%%f"

)[/src]

Den Sourcepfad habe ich dir auf den .bat pfad gesetzt.
Wie meinst du das - das Zielverzeichnis "suchen" - als Variable wird es mit SET ja schon gesetzt.
Das Problem mit *alle* verschieben ist natürlich das die .bat auch verschoben werden würde :D
Wenn du in allen dateien suchen/ersetzen willst müsstest du nur das dir /b .... *.log in *.* ändern.
Direkten exclude / include gibt es in .bat nicht (meines wissens) - das geht in Powershell ebenfalls schöner ;)
Dort könnte man alles außer *.bat verschieben.
 
  • Thread Starter Thread Starter
  • #6
Hi

ich meine der gesamte inhalt von "Log-files" Ordner ink. .log files ect.. soll vershoben werden und nicht nur die Bearbeiteten .log files

LG
 
jo eben - du schriebst ja das du aber in dem log-files ordner auch die .bat selber liegen hast...
 
  • Thread Starter Thread Starter
  • #8
Hi

bitte entschuldige die verspätete antwort

aber es funtioniert immer noch nicht


[src=bash]@echo off
SETLOCAL=ENABLEDELAYEDEXPANSION
Set SourceVerzeichnis=%~dp0
Set ZielVerzeichnis="C:\Backup\Logfiles"
RENAME "C:\Backup\Logfiles" "Logfiles-back"
mkdir "C:\Backup\Logfiles"
For /F "Tokens=*" %%f in ('Dir /b "%SourceVerzeichnis%\*.ovpn"') Do (
For /f "Tokens=* usebackq" %%a in ("%SourceVerzeichnis%\%%f") do (
Set foo=%%a
If !foo!==auth-user-pass Set foo=auth-user-pass README.txt
Echo !foo!>>"%ZielVerzeichnis%\%%f")
del "%SourceVerzeichnis%\%%f"
)
pause[/src]

alle log-files aus dem SourceVerzeichnis sind weg, und das ZielVerzeichnis (C:\Backup\Logfiles) ist leer.

und der ursprüngliche Ordner (C:\Backup\Logfiles) wird in Logfiles-back umbenannt, mehr passiert leider nicht.

LG
 
Zuletzt bearbeitet:
  1. Bei dem Set in Zeile 4 dürfen KEINE Quotes sein
  2. Zeile 5/6 wenn ich schon variablen haben sollte man die auch nehmen ;) (ist aber nur Kosmetik)
  3. Ich vermute in der Zeile steht mehr als der Suchtext. Daher funzt Zeile 10 nicht. Hab die mal durch ein „replace“ innerhalb der Zeile ersetzt


[src=bash]@echo off
SETLOCAL=ENABLEDELAYEDEXPANSION
Set SourceVerzeichnis=%~dp0
Set ZielVerzeichnis=C:\Backup\Logfiles
RENAME "%ZielVerzeichnis%" "%ZielVerzeichnis%-back"
mkdir "%ZielVerzeichnis%"
For /F "Tokens=*" %%f in ('Dir /b "%SourceVerzeichnis%\*.ovpn"') Do (
For /f "Tokens=* usebackq" %%a in ("%SourceVerzeichnis%\%%f") do (
Set foo=%%a
Set foo=!foo:auth-user-pass=auth-user-pass README.txt!
Echo !foo!>>"%ZielVerzeichnis%\%%f")
del "%SourceVerzeichnis%\%%f"
)
Pause[/src]
 
  • Thread Starter Thread Starter
  • #10
Hi

1000 dank drfuture
mit deine batch datei kann ich alle log files verschieben 1A

nun habe ich es Jetzt etwas ergänzt (zeile 7) um auch .txt und .doc dateien vom SourceVerzeichnis ins ZielVerzeichnis zü Verschieben (ohne es zu verändern=, igw. klappt das auch nicht :o
[src=bash]@echo off
SETLOCAL=ENABLEDELAYEDEXPANSION
Set SourceVerzeichnis=%~dp0
Set ZielVerzeichnis=C:\Backup\Logfiles
RENAME "%ZielVerzeichnis%" "%ZielVerzeichnis%-back"
mkdir "%ZielVerzeichnis%"
for %%i in ("%SourceVerzeichnis=%%\*.txt" "%SourceVerzeichnis=%%\*.doc") do move "%%i" "%ZielVerzeichnis%"
For /F "Tokens=*" %%f in ('Dir /b "%SourceVerzeichnis%\*.log"') Do (
For /f "Tokens=* usebackq" %%a in ("%SourceVerzeichnis%\%%f") do (
Set foo=%%a
Set foo=!foo:die-original-Zeil Set foo=die-neue-zeile!
Echo !foo!>>"%ZielVerzeichnis%\%%f")
del "%SourceVerzeichnis%\%%f"
)
Pause
[/src]

PS zeile nr 13 Funktioniert auch nicht SourceVerzeichnis wird auch nicht gelöscht.

LG
 
Warum nimmst du nicht die Powershell-Variante? Ich hab in den letzten Wochen Powershell auf Arbeit verwendet. Es fühlt sich noch immer etwas umständlich an. Aber im Gegensatz zu Batch ist Powershell ein massiver Fortschritt. Batch ist ein unbenutzbares Relikt aus der DOS-Ära und purer Masochismus.
 
Du willst an den Dateien nichts verändern - daher musst du nicht durch jede einzelne Datei itarieren....

[src=bash]@echo off
SETLOCAL=ENABLEDELAYEDEXPANSION
Set SourceVerzeichnis=%~dp0
Set ZielVerzeichnis=C:\Backup\Logfiles
RENAME "%ZielVerzeichnis%" "%ZielVerzeichnis%-back"
mkdir "%ZielVerzeichnis%"
For /F "Tokens=*" %%f in ('Dir /b "%SourceVerzeichnis%\*.ovpn"') Do (
For /f "Tokens=* usebackq" %%a in ("%SourceVerzeichnis%\%%f") do (
Set foo=%%a
Set foo=!foo:auth-user-pass=auth-user-pass README.txt!
Echo !foo!>>"%ZielVerzeichnis%\%%f")
del "%SourceVerzeichnis%\%%f"
)
move "%SourceVerzeichnis%\*.txt" "%ZielVerzeichnis%"
move "%SourceVerzeichnis%\*.doc" "%ZielVerzeichnis%"
Pause[/src]
 
  • Thread Starter Thread Starter
  • #13
Danke drfuture
einige kleine Fehler bekomme ich nicht behoben

um meinen Fehler eingrenzen zu können, habe ich das Script aufgesplittet in

z.b

[src=bash]@echo off
SETLOCAL=ENABLEDELAYEDEXPANSION
Set ZielVerzeichnis=C:\Backup\Logfiles
RENAME "%ZielVerzeichnis%" "%ZielVerzeichnis%-back"
Pause[/src]
da erhalte ich beim Ausführen des Skriptes immer einen „Syntaxfehler“ als Meldung.

und

[src=bash]@echo off
title testbatch
SETLOCAL=ENABLEDELAYEDEXPANSION
Set SourceVerzeichnis=%~dp0
del "%SourceVerzeichnis%\%%f"
Pause
[/src]

und hier erhalte ich beim Ausführen des Skriptes immer:

Code:
Expand Collapse Copy
C:\Users\Baster\Desktop\Meine Logs

C:\Windows\system32>title testbatch

C:\Windows\system32>SETLOCAL=ENABLEDELAYEDEXPANSION

C:\Windows\system32>Set SourceVerzeichnis=C:\Users\Baster\Desktop\Meine Logs\

C:\Windows\system32>del "C:\Users\Baster\Desktop\Meine Logs\\f"
C:\Users\Baster\Desktop\Meine Logs\f konnte nicht gefunden werden

C:\Windows\system32>Pause
Drücken Sie eine beliebige Taste . . .

evtl. hat jemanden einen tipp

LG
 
Zurück
Oben