Batchdatei um Dateien in neuen Ordner zu kopieren und umzubenennen
Hallo zusammen,
wir haben folgendes Problem:
Wir sind ein kleines Hörbuchstudio. Unsere Aufnahmen werden nach dem Schneiden und Bearbeiten noch einmal komplett von einer Person gegengehört (Proof Listening). Dieses Proof Listening soll über einen Audio Player laufen, der Bookmarks für die abzuhörenden MP3 Files erstellt und diese in einer Datei speichert.
Nun haben wir einen sehr komfortablen Player gefunden, allerdings speichert dieser 1. für jede MP3 File mit Bookmark eine einzelne Datei und 2. wird diese Datei dann im Format *.pbt gespeichert (Bookmark-Format vom Player).
Diese *.pbt Dateien sind am Ende allerdings nur anders benannte *.txt Dateien.
Nun haben wir folgendes vor:
Wir benötigen (am besten) eine Batch-Datei, die in dem Ordner, in dem sie abgelegt wird, einen neuen Ordner erstellt, alle Dateien mit der Endung *.pbt dort hin kopiert und diese in *.txt umbenennt.
Großartig wäre noch, wenn er diese erstellten *.txt Dateien am Ende zu einer großen *.txt Datei zusammenfassen kann und (im noch allerbesten Fall) in diesem neunen Dokument vor dem Inhalt jeder txt Datei noch den Namen der jeweiligen Datei darüber schreiben kann.
Ist so etwas möglich oder benötigt man hier mehrere Schritte ... oder geht das vielleicht gar nicht über Batch?
Viele Grüße
wir haben folgendes Problem:
Wir sind ein kleines Hörbuchstudio. Unsere Aufnahmen werden nach dem Schneiden und Bearbeiten noch einmal komplett von einer Person gegengehört (Proof Listening). Dieses Proof Listening soll über einen Audio Player laufen, der Bookmarks für die abzuhörenden MP3 Files erstellt und diese in einer Datei speichert.
Nun haben wir einen sehr komfortablen Player gefunden, allerdings speichert dieser 1. für jede MP3 File mit Bookmark eine einzelne Datei und 2. wird diese Datei dann im Format *.pbt gespeichert (Bookmark-Format vom Player).
Diese *.pbt Dateien sind am Ende allerdings nur anders benannte *.txt Dateien.
Nun haben wir folgendes vor:
Wir benötigen (am besten) eine Batch-Datei, die in dem Ordner, in dem sie abgelegt wird, einen neuen Ordner erstellt, alle Dateien mit der Endung *.pbt dort hin kopiert und diese in *.txt umbenennt.
Großartig wäre noch, wenn er diese erstellten *.txt Dateien am Ende zu einer großen *.txt Datei zusammenfassen kann und (im noch allerbesten Fall) in diesem neunen Dokument vor dem Inhalt jeder txt Datei noch den Namen der jeweiligen Datei darüber schreiben kann.
Ist so etwas möglich oder benötigt man hier mehrere Schritte ... oder geht das vielleicht gar nicht über Batch?
Viele Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 670073
Url: https://administrator.de/forum/batchdatei-um-dateien-in-neuen-ordner-zu-kopieren-und-umzubenennen-670073.html
Ausgedruckt am: 15.01.2025 um 13:01 Uhr
3 Kommentare
Neuester Kommentar
Hm...für eine Batchdatei
Kopiert soll auch werden. Dann mal scriptig in der Batch
for %%f in (*.pbt) do (echo --- %%f --- & type "%%f" & echo.) >> gesamt.txt
Kopiert soll auch werden. Dann mal scriptig in der Batch
@echo off
setlocal enabledelayedexpansion
set "output_file=gesamt.txt"
set "output_dir=%~dp0%output_file:~0,-4%"
if exist "%output_file%" del "%output_file%"
if not exist "%output_dir%" mkdir "%output_dir%"
for %%F in (*.pbt) do (
if not "%%F"=="%output_file%" (
echo --- %%F --- >> "%output_file%"
type "%%F" >> "%output_file%"
echo. >> "%output_file%"
)
)
move "%output_file%" "%output_dir%"
echo Kombinierte Datei wurde erstellt und in %output_dir% verschoben.
Moin,
das solltest du überdenken. Aus Erfahrung führt das gerade in einem Fall wie diesem dazu, dass die Batch später dutzende male in verschiedenen Ordnern existiert. Im schlimmsten Falle wurde sie noch weiter fortgeschrieben und existiert in den verschiedensten Versionen.
Besser ist immer den jeweiligen Ordnerpfad als Parameter an das Skript zu übergeben. Zudem ist es so auch möglich, gleich mehrere verschiedene Projektordner auf einmal verarbeiten zu lassen.
Für die Übergabe des Ordners an das Skript gibt es diverse Möglichkeiten:
Alternativ über Powershell (weil Batch eigentlich tot):
Bei Powershell darf das Verknüpfungsziel dann allerdings nicht nur der Skriptpfad sein, sondern
Gruß Thomas
das solltest du überdenken. Aus Erfahrung führt das gerade in einem Fall wie diesem dazu, dass die Batch später dutzende male in verschiedenen Ordnern existiert. Im schlimmsten Falle wurde sie noch weiter fortgeschrieben und existiert in den verschiedensten Versionen.
Besser ist immer den jeweiligen Ordnerpfad als Parameter an das Skript zu übergeben. Zudem ist es so auch möglich, gleich mehrere verschiedene Projektordner auf einmal verarbeiten zu lassen.
Für die Übergabe des Ordners an das Skript gibt es diverse Möglichkeiten:
- Verknüpfung zum Skript in den Ordner "%appdata%\Microsoft\Windows\SendTo" legen. Fortan kann man dann einfach auf einen Ordner per Rechtsklick "Senden an > <Skriptname>" auswählen, um das Skript zu starten.
- Per eigenem Kontextmenüeintrag
- Ordner per Drag&Drop auf das Skript ziehen
- ...
@echo off
set outdir=Transkript
set outfile=Gesamt.txt
:: Für jeden Parameter: Wenn Ordner, an Funktion übergeben. Sonst Fehlermeldung und ignorieren.
for %%A in (%*) do 2>nul pushd "%%~A" &&(popd & call :mergeTranscript "%%~A") || (echo(ACHTUNG: "%%~nxA" ist kein Ordner und wird ignoriert.&set stop=true)
if defined stop (
echo(
echo(|set /p ="--- Beliebige Taste zum Beenden --- "
>nul pause
)
exit /b 0
:mergeTranscript <dir>
if not exist "%~1\%outdir%" md "%~1\%outdir%"
>"%~1\%outdir%\%outfile%" (for %%A in ("%~1\*.pbt") do (
echo(--- %%~nxA ---
type "%%~A"
echo(
))
exit /b 0
Alternativ über Powershell (weil Batch eigentlich tot):
$outdir = "Transkript"
$outfile = "Gesamt.txt"
foreach ($arg in $args) {
if (!(Test-Path -PathType Container -Path $arg)) {
Write-Host -ForegroundColor yellow "ACHTUNG: ""$arg"" ist kein Ordner und wird ignoriert."
$stop = 1
continue
}
if (!(Test-Path "$arg\$outdir")) {[void](md "$arg\$outdir")}
$(foreach ($file in Get-ChildItem "$arg\*.pbt") {
"--- {0} ---" -f $file.Name
Get-Content $file
""
}) | Set-Content "$arg\$outdir\$outfile"
}
if ($stop) {
Write-Host -ForegroundColor yellow -NoNewLine "`n--- Beliebige Taste zum Beenden --- "
[void][console]::ReadKey($true)
}
Bei Powershell darf das Verknüpfungsziel dann allerdings nicht nur der Skriptpfad sein, sondern
powershell.exe -File "<Skriptpfad>"
Gruß Thomas