Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Aus allen TXT Dateien eines Verzeichnisses die erste Zeile entfernen

Frage Entwicklung Batch & Shell

Mitglied: intermde

intermde (Level 1) - Jetzt verbinden

31.08.2012 um 20:05 Uhr, 3725 Aufrufe, 11 Kommentare

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
Mitglied: MisterExpulso
31.08.2012, aktualisiert um 20:26 Uhr
Hallo,
in etwa so?

01.
@echo off & setlocal 
02.
 
03.
set "folder=C:\Folder" 
04.
 
05.
pushd "%folder%" || goto :eof 
06.
for /f "delims=" %%a in ('dir /a-d /b *.txt') do ( 
07.
  set "filename=%%a" 
08.
  call :procFile 
09.
10.
goto :eof 
11.
 
12.
:procFile 
13.
type nul>"tmp.txt" 
14.
for /f "delims=: tokens=1*" %%b in ('findstr /n /r /c:"^" "%filename%"') do ( 
15.
  set "lineNr=%%b" 
16.
  set "lineTxt=%%c" 
17.
  call :procLine 
18.
19.
move "tmp.txt" "%filename%" 
20.
goto :eof 
21.
 
22.
:procLine 
23.
if %lineNr% leq 1 goto :eof 
24.
if not defined lineTxt ( 
25.
  >>"tmp.txt" echo. 
26.
  goto :eof 
27.
28.
set "lineTxt=%lineTxt:^=^^%" 
29.
set "lineTxt=%lineTxt:&=^&%" 
30.
set "lineTxt=%lineTxt:<=^<%" 
31.
set "lineTxt=%lineTxt:>=^>%" 
32.
set "lineTxt=%lineTxt:|=^|%" 
33.
>>"tmp.txt" echo.%lineTxt% 
34.
goto :eof
Gruß,
DB
Bitte warten ..
Mitglied: bytecounter
31.08.2012, aktualisiert um 20:28 Uhr
Hallo,

die erste Zeile kannst Du wie folgt entfernen:

01.
FOR /F "tokens=*" %%a IN ('DIR *.txt /B') DO ( 
02.
  RENAME "%%a" "%%a.bak" 
03.
 
04.
  FOR /F "tokens=* skip=1 usebackq" %%b IN ("%%a.BAK") DO ( 
05.
    ECHO %%b >>"%%a" 
06.
07.
 
08.
   
09.
)
Anschließend kannst Du die .bak Dateien löschen:

01.
del *.bak
vg
Bitte warten ..
Mitglied: bastla
31.08.2012 um 21:20 Uhr
Hallo @All!

Vielleicht auch so (ungetestet):
01.
for /f "delims=" %%i in ('dir /b *.txt') do ( 
02.
    more +1 "%%i">"%temp%\Tmp.txt" 
03.
    move "%temp%\Tmp.txt" "%%i" 
04.
)
Grüße
bastla
Bitte warten ..
Mitglied: 60730
31.08.2012, aktualisiert um 21:27 Uhr
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
Bitte warten ..
Mitglied: intermde
31.08.2012 um 21:54 Uhr
Hintergrund ist eigentlich, dass diese Dateien in Access weiter verwendet werden sollen

Problem, in Access kann ich bei import nicht angeben, dass er die erste Zeile ignorieren soll, da erst in der zweiten Zeile "Spaltenüberschriften" stehen

Hab nun aber festgestellt, dass Access Probleme hat die Dateien zu importieren wenn als Trennzeichen ein ","
ersetzte ich dieses händisch durch ein ";" kann die Datei eingebunden werden.

wie kann ich das Script

01.
@echo off & setlocal 
02.
 
03.
set "folder=C:\Folder" 
04.
 
05.
pushd "%folder%" || goto :eof 
06.
for /f "delims=" %%a in ('dir /a-d /b *.txt') do ( 
07.
  set "filename=%%a" 
08.
  call :procFile 
09.
10.
goto :eof 
11.
 
12.
:procFile 
13.
type nul>"tmp.txt" 
14.
for /f "delims=: tokens=1*" %%b in ('findstr /n /r /c:"^" "%filename%"') do ( 
15.
  set "lineNr=%%b" 
16.
  set "lineTxt=%%c" 
17.
  call :procLine 
18.
19.
move "tmp.txt" "%filename%" 
20.
goto :eof 
21.
 
22.
:procLine 
23.
if %lineNr% leq 1 goto :eof 
24.
if not defined lineTxt ( 
25.
  >>"tmp.txt" echo. 
26.
  goto :eof 
27.
28.
set "lineTxt=%lineTxt:^=^^%" 
29.
set "lineTxt=%lineTxt:&=^&%" 
30.
set "lineTxt=%lineTxt:<=^<%" 
31.
set "lineTxt=%lineTxt:>=^>%" 
32.
set "lineTxt=%lineTxt:|=^|%" 
33.
>>"tmp.txt" echo.%lineTxt% 
34.
goto :eof
erweitern, dass er mir ein "," mit ";" ersetzt.

bzw. wie man beides miteinander kombinieren kann,
sprich erstze nur die erste zeile und ersetzte in den Dateien das "," durch ";"

Danke nochmal für die Hinweise.
Bitte warten ..
Mitglied: 60730
31.08.2012, aktualisiert um 22:52 Uhr
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
Bitte warten ..
Mitglied: pieh-ejdsch
31.08.2012, aktualisiert um 23:06 Uhr
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.
01.
@echo off 
02.
setlocal disabledelayedexpansion 
03.
pushD D:\Ordner ||echo Datei nicht gefunden! 1>&2 &&exit /b 1 
04.
for /f delims^= %%i in ('dir /a-d /b *.txt' ) do ( 
05.
  findstr /n "^" "%%~i"|find /vb "1:" 1>"%temp%\wO1st.txt" 
06.
07.
  for /f "usebackqdelims=" %%j in ("%temp%\wO1st.txt" ) do ( 
08.
    set "line=%%i" 
09.
    setlocal enabledelayedexpansion 
10.
    set "Line=!Line:,=;!" 
11.
    echo(!Line:*:=! 
12.
    endlocal 
13.
  ))>"%%~i" 
14.
15.
del "%temp%\wO1st.txt"
Gruß Phil
Bitte warten ..
Mitglied: bastla
01.09.2012, aktualisiert um 00:03 Uhr
@ T-Mo
VBS verschluckt jedenfalls nix :
01.
Ordner = "D:\X" 
02.
Typ = "txt" 'in Kleinbuchstaben 
03.
 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
For Each Datei In fso.GetFolder(Ordner).Files 
06.
    If LCase(fso.GetExtensionName(Datei.Name)) = Typ Then 
07.
        T = Datei.OpenAsTextStream.ReadAll 
08.
        fso.CreateTextFile(Datei.Path).Write Mid(Replace(T, ",", ";"), InStr(T, vbNewline) + 2) 
09.
    End If 
10.
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
Bitte warten ..
Mitglied: Pjordorf
01.09.2012 um 01:26 Uhr
Hallo,

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.

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.
bac023a2dcccc00311307858064ccf7b - Klicke auf das Bild, um es zu vergrößern
de8dcac1d63eee09ab83b28d4d7c8f3a - Klicke auf das Bild, um es zu vergrößern
9a356409d604ad60f5c0a08ddff08b32 - Klicke auf das Bild, um es zu vergrößern
f63e44dfaf120c14be63d6c9354c6577 - Klicke auf das Bild, um es zu vergrößern

Und was du hier Händisch tun kannst, kann auch per VBA Automatisiert werden.

Gruß,
Peter
Bitte warten ..
Mitglied: intermde
01.09.2012 um 05:11 Uhr
Hallo, dank euch für die vielen Hinweise und Lösungen.
hab es soweit nun hinbekommen wie ich es für Access benötige.
werde nin eine weitere Frage eröffnen müssen, damit ich die Daten besser verwalten kann.

Denoch nochmal ein Dankeschön.
Bitte warten ..
Mitglied: 60730
01.09.2012 um 10:46 Uhr
(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
Bitte warten ..
Ähnliche Inhalte
Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Windows Server

Exchange 2010 Active Directory und Windows Server 2016

(4)

Erfahrungsbericht von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Internet
gelöst Mitarbeiter surft auf unerwünschter Seite - Wie damit umgehen? (50)

Frage von sabines zum Thema Internet ...

Netzwerke
LAN2LAN Verbindung sehr langsam flaschenhals gesucht (27)

Frage von PixL86 zum Thema Netzwerke ...

Router & Routing
PFsense - Netzverbindung steht, aber kein Internet vorhanden (24)

Frage von aschmid zum Thema Router & Routing ...

Windows Server
gelöst Windows 2016 Hyper-V und VHDS (19)

Frage von emeriks zum Thema Windows Server ...