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, 3665 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell: Variablen aus .txt Dateien heraus ausgeben (5)

Frage von Tobiased zum Thema Batch & Shell ...

Microsoft Office
gelöst Txt Dateien in Excel importieren (9)

Frage von Serbitar zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...