Per Batch beliebiges Dateiformat mit Editor öffnen und als .txt abspeichern
Hallo miteinander,
ich möchte gern eine Datei mittels Batch mit dem Editor öffnen und dann als .txt abspeichern. Ich geb mal ein kleines Beispiel:
Dat1.rf7 soll mit "in" den Editor geöffnet werden und anschließend als Dat1.txt abgespeichert werden.
Ich habe schon versucht nur die Dateiformat-Endung zu ändern (einfach von .rf7 zu .txt), was allerdings die Datei scheinbar nicht soweit verändert, als das man anschließend die Resultierende .txt zu 100% weiterverarbeiten kann. Wenn man die Datei manuell mit dem Editor öffnet und abspeichert macht das Weiterverarbeiten keine Probleme. Deswegen der eventuell umständlich erscheinende Weg mit dem Editor.
Freue mich auf eure Antworten.
MfG
knechtibus
ich möchte gern eine Datei mittels Batch mit dem Editor öffnen und dann als .txt abspeichern. Ich geb mal ein kleines Beispiel:
Dat1.rf7 soll mit "in" den Editor geöffnet werden und anschließend als Dat1.txt abgespeichert werden.
Ich habe schon versucht nur die Dateiformat-Endung zu ändern (einfach von .rf7 zu .txt), was allerdings die Datei scheinbar nicht soweit verändert, als das man anschließend die Resultierende .txt zu 100% weiterverarbeiten kann. Wenn man die Datei manuell mit dem Editor öffnet und abspeichert macht das Weiterverarbeiten keine Probleme. Deswegen der eventuell umständlich erscheinende Weg mit dem Editor.
Freue mich auf eure Antworten.
MfG
knechtibus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 122034
Url: https://administrator.de/forum/per-batch-beliebiges-dateiformat-mit-editor-oeffnen-und-als-txt-abspeichern-122034.html
Ausgedruckt am: 23.12.2024 um 10:12 Uhr
17 Kommentare
Neuester Kommentar
Hallo knechtibus!
Auch wenn es wahrscheinlich eine andere (und jedenfalls bessere) Lösung gibt, als den "Editor" fernzusteuern, machbar wäre es (allerdings nur als "Bastelei" im wahrsten Sinn des Wortes ):
In den folgenden Zeilen sind jeweils Pausen von 1 Sekunde (da Angabe in ms mit dem Wert 1000) für das Starten des Editors und für das Speichern enthalten - vielleicht musst Du diese verlängern, um auf der sicheren Seite zu sein:
Kurz zum Ablauf:
Zunächst wird das "Fernsteuerungs-Script" in VBS erstellt - dieses erwartet beim Aufruf als Parameter den Pfad (ohne abschließenden "\") und den Dateinamen.
Da der Editor in der Titelleiste (zumindest bei mir) nur den Dateinamen anzeigt (aber aufgrund dieser Information das Editor-Fenster gefunden werden muss) und auch beim Speichern keine Datei "dat1.rf7.txt", sondern "dat1.txt" entstehen soll, wird zunächst eine Kopie der Ausgangsdatei (wodurch diese als Sicherung erhalten bleibt) ohne Dateityp erzeugt und (scriptgesteuert) an den Editor zum "Neuspeichern" übergeben. Abschließend wird diese Kopie wieder entsorgt.
Grüße
bastla
Auch wenn es wahrscheinlich eine andere (und jedenfalls bessere) Lösung gibt, als den "Editor" fernzusteuern, machbar wäre es (allerdings nur als "Bastelei" im wahrsten Sinn des Wortes ):
@echo off & setlocal
set "Ordner=D:\Ordner Test"
set "Datei=dat1.rf7"
set S=%temp%\SaveAsText.vbs
>%S% echo set Sh=WScript.CreateObject("WScript.Shell"):Datei=WScript.Arguments(1)
>>%S% echo Cmd="notepad.exe """^&WScript.Arguments(0)^&"\"^&^Datei^& """"
>>%S% echo Sh.Run Cmd:WScript.Sleep 1000:Sh.AppActivate Datei^&" - Editor":WScript.Sleep 100
>>%S% echo Sh.SendKeys "%%du{ENTER}":WScript.Sleep 1000:Sh.SendKeys "%%db"
for %%i in ("%Ordner%\%Datei%") do (
set "Dateiname=%%~ni"
copy "%%~i" "%Ordner%\%%~ni" >nul
)
if exist "%Ordner%\%Dateiname%.txt" echo Textdatei bereits vorhanden! & goto :eof
cscript //nologo %S% "%Ordner%" "%Dateiname%"
del "%Ordner%\%Dateiname%"
>>%S% echo Sh.Run Cmd:WScript.Sleep 1000:Sh.AppActivate Datei^&" - Editor":WScript.Sleep 100
>>%S% echo Sh.SendKeys "%%du{ENTER}":WScript.Sleep 1000:Sh.SendKeys "%%db"
Zunächst wird das "Fernsteuerungs-Script" in VBS erstellt - dieses erwartet beim Aufruf als Parameter den Pfad (ohne abschließenden "\") und den Dateinamen.
Da der Editor in der Titelleiste (zumindest bei mir) nur den Dateinamen anzeigt (aber aufgrund dieser Information das Editor-Fenster gefunden werden muss) und auch beim Speichern keine Datei "dat1.rf7.txt", sondern "dat1.txt" entstehen soll, wird zunächst eine Kopie der Ausgangsdatei (wodurch diese als Sicherung erhalten bleibt) ohne Dateityp erzeugt und (scriptgesteuert) an den Editor zum "Neuspeichern" übergeben. Abschließend wird diese Kopie wieder entsorgt.
Grüße
bastla
Hallo knechtibus!
Als "Lösung" würde ich die Spielerei da oben nicht bezeichnen - wenn Du damit eine Massenkonvertierung unter Aufsicht vornehmen willst, wäre das vielleicht grade noch ok; als Bestandteil eines unbeaufsichtigt ablaufenden Batches aber nicht - es kann zwischen den simulierten Tastendrücken einfach zu viel (oder zu wenig) passieren ...
Lässt sich etwas näher eingrenzen, um welches Format es bei den zu konvertierenden Dateien geht (Unicode würde ich eher nicht annehmen, da bei einem "type" ja eine implizite Konvertierung nach ASCII erfolgen sollte und es damit nicht geklappt hat)?
Grüße
bastla
Als "Lösung" würde ich die Spielerei da oben nicht bezeichnen - wenn Du damit eine Massenkonvertierung unter Aufsicht vornehmen willst, wäre das vielleicht grade noch ok; als Bestandteil eines unbeaufsichtigt ablaufenden Batches aber nicht - es kann zwischen den simulierten Tastendrücken einfach zu viel (oder zu wenig) passieren ...
Lässt sich etwas näher eingrenzen, um welches Format es bei den zu konvertierenden Dateien geht (Unicode würde ich eher nicht annehmen, da bei einem "type" ja eine implizite Konvertierung nach ASCII erfolgen sollte und es damit nicht geklappt hat)?
Grüße
bastla
Hallo knechtibus!
Grüße
bastla
Kann ich mit der von dir vorgeschlagenen Variante die .txt die erstellt wird, auch überschreiben und wenn ja wie?
Etwa so:@echo off & setlocal
set "Ordner=D:\Ordner Test"
set "Datei=dat1.rf7"
set S=%temp%\SaveAsText.vbs
>%S% echo set Sh=WScript.CreateObject("WScript.Shell"):Datei=WScript.Arguments(1)^&".txt"
>>%S% echo Cmd="notepad """^&WScript.Arguments(0)^&"\"^&^Datei^& """"
>>%S% echo Sh.Run Cmd:WScript.Sleep 1000:Sh.AppActivate Datei^&" - Editor":WScript.Sleep 100
>>%S% echo Sh.SendKeys "^s":WScript.Sleep 1000:Sh.SendKeys "%%db"
for %%i in ("%Ordner%\%Datei%") do (
set "Dateiname=%%~ni"
copy "%%~i" "%Ordner%\%%~ni.txt" >nul
)
cscript //nologo %S% "%Ordner%" "%Dateiname%"
bastla
Hallo knechtibus!
Eigentlich sollte es kein "Überschreiben" durch den Editor geben, sondern ein gewöhnliches "Speichern" - beim Aufruf des Editors wird ja bereits die Kopie (also "Dat1.txt") übergeben ...
Wie sieht denn der Ablauf aus, wenn Du "echo on" verwendest? Der Aufruf des Scripts müsste etwa so erfolgen:
Dem als zweitem Parameter übergebenen Dateinamen fügt das Script dann noch ein ".txt" hinzu und ruft damit den Editor auf - um das zu testen, könntest Du zwischen den Zeilen 8 und 9 einfügen:
Das Ergebnis müsste dann etwa so aussehen:
Mehr kann ich von hier aus nicht abschätzen (bei mir funktioniert's nämlich) ...
Grüße
bastla
Eigentlich sollte es kein "Überschreiben" durch den Editor geben, sondern ein gewöhnliches "Speichern" - beim Aufruf des Editors wird ja bereits die Kopie (also "Dat1.txt") übergeben ...
Wie sieht denn der Ablauf aus, wenn Du "echo on" verwendest? Der Aufruf des Scripts müsste etwa so erfolgen:
D:\>cscript //nologo C:\DOKUME~1\Username\LOKALE~1\Temp\SaveAsText.vbs "D:\Ordner Test"
"Dat1"
>>%S% echo WScript.Echo Cmd
notepad "D:\Ordner Test\Dat1.txt"
Grüße
bastla
Hallo knechtibus!
Sollte so gehen:
Grüße
bastla
Sollte so gehen:
set "Quelle=C:\TraceDat"
set "Ziel=C:\akt_trace.txt"
::Pause in Sekunden festlegen
set "Pause=10"
pushd "%Quelle%"
set "Zuletzt=_"
:Schleife
set "Zweite="
for /f "skip=1 delims=" %%i in ('dir /b /o-n /a-d 2^>nul') do if not defined Zweite set "Zweite=%%i"
if defined Zweite echo Um %time:~,8% gefunden: %Zweite%
if defined Zweite if "%Zweite%" neq "%Zuletzt%" (
copy "%Zweite%" "%Ziel%">nul
set "Zuletzt=%Zweite%"
echo Um %time:~,8% kopiert: %Zweite%
)
::Pausieren
sleep %Pause%
goto :Schleife
bastla
Hallo knechtibus!
Das macht's eigentlich einfacher:
Grüße
bastla
Das macht's eigentlich einfacher:
@echo off & setlocal
set "Ordner=D:\Ordner Test"
set "Datei=dat1.rf7"
set "Ziel=D:\Test\Gruppe"
set "Dateiname=test"
if not exist "%Ziel%" md "%Ziel%"
set S=%temp%\SaveAsText.vbs
>%S% echo set Sh=WScript.CreateObject("WScript.Shell"):Datei=WScript.Arguments(1)^&".txt"
>>%S% echo Cmd="notepad """^&WScript.Arguments(0)^&"\"^&^Datei^& """"
>>%S% echo Sh.Run Cmd:WScript.Sleep 1000:Sh.AppActivate Datei^&" - Editor":WScript.Sleep 100
>>%S% echo Sh.SendKeys "^s":WScript.Sleep 1000:Sh.SendKeys "%%db"
copy "%Ordner%\%Datei%" "%Ziel%\%Dateiname%.txt" >nul
cscript //nologo %S% "%Ziel%" "%Dateiname%"
bastla