Aus allen TXT Dateien eines Verzeichnisses die erste Zeile entfernen
Hallo,
ich habe über Programme TXT Dateien erzeugt bekommen. Nun möchte ich per Batch oder vbs Script erreichen, dass aus diesem Verzeichnis X alle TXT Dateien die erste Zeile gelöscht wird.
Die Dateien sollen nicht unter einem anderen Namen gespeichert werden, sondern nur erste Zeile entfernen und dann speichern.
Ich kenne mich mit scripten nicht aus, daher die Frage im Forum.
Danke für eure Hilfe
ich habe über Programme TXT Dateien erzeugt bekommen. Nun möchte ich per Batch oder vbs Script erreichen, dass aus diesem Verzeichnis X alle TXT Dateien die erste Zeile gelöscht wird.
Die Dateien sollen nicht unter einem anderen Namen gespeichert werden, sondern nur erste Zeile entfernen und dann speichern.
Ich kenne mich mit scripten nicht aus, daher die Frage im Forum.
Danke für eure Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 190555
Url: https://administrator.de/contentid/190555
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo,
in etwa so?
Gruß,
DB
in etwa so?
@echo off & setlocal
set "folder=C:\Folder"
pushd "%folder%" || goto :eof
for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
set "filename=%%a"
call :procFile
)
goto :eof
:procFile
type nul>"tmp.txt"
for /f "delims=: tokens=1*" %%b in ('findstr /n /r /c:"^" "%filename%"') do (
set "lineNr=%%b"
set "lineTxt=%%c"
call :procLine
)
move "tmp.txt" "%filename%"
goto :eof
:procLine
if %lineNr% leq 1 goto :eof
if not defined lineTxt (
>>"tmp.txt" echo.
goto :eof
)
set "lineTxt=%lineTxt:^=^^%"
set "lineTxt=%lineTxt:&=^&%"
set "lineTxt=%lineTxt:<=^<%"
set "lineTxt=%lineTxt:>=^>%"
set "lineTxt=%lineTxt:|=^|%"
>>"tmp.txt" echo.%lineTxt%
goto :eof
Gruß,
DB
Moin,
Ohne den beiden vorschreibern nahetreten zu wollen, aber beide loesungen haben einen je einen haken.....
More verschluckt gerne mal tabs in "tabellen", for schleifen moegen bestimmte sonderzeichen nicht.
Von daher, warum willst du das denn ueberhaupt machen?
Und dann, wie willst du verhindern, dass das script eine datei nicht per dummen zufall 2 mal anfasst und dir dann ? Zeilen fehlen?
Gruss
Ohne den beiden vorschreibern nahetreten zu wollen, aber beide loesungen haben einen je einen haken.....
More verschluckt gerne mal tabs in "tabellen", for schleifen moegen bestimmte sonderzeichen nicht.
Von daher, warum willst du das denn ueberhaupt machen?
Und dann, wie willst du verhindern, dass das script eine datei nicht per dummen zufall 2 mal anfasst und dir dann ? Zeilen fehlen?
Gruss
Ganz ehrlich?
Schaff dir nen mysqlserver an, verlagere die tabellen in diese und verknuepfe die in access und du hast nicht nur einen riesen schritt in sachen performance gemacht, auch das rumfuhrwerken in den daten kannst du dir sparen.
Mysql kann logischerweise auch ein skip xxx beim importieren.
Gruss
Schaff dir nen mysqlserver an, verlagere die tabellen in diese und verknuepfe die in access und du hast nicht nur einen riesen schritt in sachen performance gemacht, auch das rumfuhrwerken in den daten kannst du dir sparen.
Mysql kann logischerweise auch ein skip xxx beim importieren.
Gruss
moin,
dann definiere doch mal genau wie die erste Zeile sich von den Anderen Zeilen Unterscheidet, dann liese sich auch ein doppeltes Anfassen der Datei verhindern.
Sonst würde ich dies Einfach mit einer Ordentlich angelegten Temporären Datei Lösen - was auch Fixer geht.
Gruß Phil
dann definiere doch mal genau wie die erste Zeile sich von den Anderen Zeilen Unterscheidet, dann liese sich auch ein doppeltes Anfassen der Datei verhindern.
Sonst würde ich dies Einfach mit einer Ordentlich angelegten Temporären Datei Lösen - was auch Fixer geht.
@echo off
setlocal disabledelayedexpansion
pushD D:\Ordner ||echo Datei nicht gefunden! 1>&2 &&exit /b 1
for /f delims^= %%i in ('dir /a-d /b *.txt' ) do (
findstr /n "^" "%%~i"|find /vb "1:" 1>"%temp%\wO1st.txt"
(
for /f "usebackqdelims=" %%j in ("%temp%\wO1st.txt" ) do (
set "line=%%i"
setlocal enabledelayedexpansion
set "Line=!Line:,=;!"
echo(!Line:*:=!
endlocal
))>"%%~i"
)
del "%temp%\wO1st.txt"
Gruß Phil
@ T-Mo
VBS verschluckt jedenfalls nix :
Grüße
bastla
VBS verschluckt jedenfalls nix :
Ordner = "D:\X"
Typ = "txt" 'in Kleinbuchstaben
Set fso = CreateObject("Scripting.FileSystemObject")
For Each Datei In fso.GetFolder(Ordner).Files
If LCase(fso.GetExtensionName(Datei.Name)) = Typ Then
T = Datei.OpenAsTextStream.ReadAll
fso.CreateTextFile(Datei.Path).Write Mid(Replace(T, ",", ";"), InStr(T, vbNewline) + 2)
End If
Next
Und dann, wie willst du verhindern, dass das script eine datei nicht per dummen zufall 2 mal anfasst und dir dann ? Zeilen fehlen?
Soferne der Batch nur einmal läuft, kommt mit "dir /b
" jede Datei auch nur einmal an die Reihe ...Grüße
bastla
Hallo,
Hier mal mit Access 2007 der Import einer .CSV Datei als Beispiel.
Und was du hier Händisch tun kannst, kann auch per VBA Automatisiert werden.
Gruß,
Peter
Zitat von @intermde:
Problem, in Access kann ich bei import nicht angeben, dass er die erste Zeile ignorieren soll,
In Access 2003 und 2007 geht das sehr wohl. Und ich meine es auch in Access 2000 schon gemacht zu haben.Problem, in Access kann ich bei import nicht angeben, dass er die erste Zeile ignorieren soll,
Hab nun aber festgestellt, dass Access Probleme hat die Dateien zu importieren wenn als Trennzeichen ein ","
Auch das geht seit Access 2000. Du kannst im Import fast jedes Zeichen als Trennzeichen definieren und noch etliche Optionen mehr.Hier mal mit Access 2007 der Import einer .CSV Datei als Beispiel.
Und was du hier Händisch tun kannst, kann auch per VBA Automatisiert werden.
Gruß,
Peter
(ot)
Bastla, "mir" musst du das doch nicht erklaeren
Frueher hab ich sowas ja auch mal mit der not dem teufel und den fliegen gesehen, aber mittlerweile sehe ich das aehnlich wie ein uns allen bekanntes geschoepf, was es damals (aus nicht nachvollziehbaten gruenden) nicht zu den bremer stadtmusikanten geschafft hat
Bastla, "mir" musst du das doch nicht erklaeren
Frueher hab ich sowas ja auch mal mit der not dem teufel und den fliegen gesehen, aber mittlerweile sehe ich das aehnlich wie ein uns allen bekanntes geschoepf, was es damals (aus nicht nachvollziehbaten gruenden) nicht zu den bremer stadtmusikanten geschafft hat