2009-07-15 8 views

Antwort

3

Das klingt wie ein Job für sed. Unter Windows müssten Sie windows port installieren und dann sed in Ihrer Batch-Datei aufrufen.

sed '<linenumber>d' filename > newfilename 

die 4. Zeile löschen:

sed '4d' filename > newfilename 
+0

hmmm ... wenn ich sed installiert und meinen Computer neu gestartet habe, wurde es von CMD nicht gefunden. Ich habe Win7. –

+0

oh, ich weiß wie es jetzt funktioniert. –

1

Wenn Sie in Windows sind und Sie wollen es in einer Batch-Datei zu tun, können Sie das folgende mit brutaler Gewalt tun:

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
SET lineNum= 
SET filename=%1 
SET targetLine=%2 
SET targetFile=%filename%.tmp 
DEL %targetFile% 
FOR /F " tokens=1 delims=" %%i in (%filename%) do (
    SET /a lineNum += 1 
    if NOT !lineNum! == !targetLine! ECHO %%i >> !targetFile! 
) 
REN %filename% %filename%.orig 
REN %targetFile% %filename% 

In den Stapel geben Sie den Namen Ihrer Zieldatei und die Zeilennummer ein, die Sie entfernen möchten. Es erstellt eine temporäre Datei, leitet die "guten" Zeilen von Ihrem Original in den Temp und endet dann durch Umbenennen der Dateien, so dass Sie Ihr Original behalten und die modifizierte Datei an Ort und Stelle haben.

0

müssen Sie keinen externen Befehl verwenden. Sie können Vbscript

Set objFS = CreateObject("Scripting.FileSystemObject") 
Set objArgs = WScript.Arguments 
num = objArgs(0) 
strFile = objArgs(1) 
Set objFile = objFS.OpenTextFile(strFile) 
Do Until objFile.AtEndOfLine 
    linenum = objFile.Line 
    If linenum = Int(num) Then 
     objFile.SkipLine 
    End If 
    strLine = objFile.ReadLine 
    WScript.Echo strLine 
Loop 

, wie benutzen verwenden:

C:\test>cscript /nologo removeline.vbs 4 file.txt > newfile.txt 
1

reine cmd ?:

delline.cmdNummerDateiname

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
set line=%~1 
set file=%~nx2 
set dSource=%~dp2 
set i=0 
for /F "delims=" %%l in (%dSource%%file%) do (
    set /a i+=1 
    if not !i! EQU %line% call :BuildFile "%%l" 
) 
del /f "%dSource%%file%" >nul 
for %%l in (%_file%) do echo %%~l>>"%dSource%%file%" 
endlocal& exit /b 0 

:BuildFile 
    set _file=%_file% %1 
    exit /b 0 

___Notes_____
1: Keine Überprüfung der Parameter. Zuerst muss eine Nummer sein, die zweite eine Datei oder Pfad + Datei.
2: Wie bei anderen Antworten auch keine temporäre Datei.
3: setlocal Mit Ihnen erlauben würde, diesen Code einfach in einem Skript zu integrieren, indem es Namensgebung: delline und deren Verwendung mag: Aufruf: delline NummerDatei

WARNUNG: Eine leere Zeile aus der Quelldatei würde beim Lesen übersprungen/verloren gehen (durch die for.loop). Eine Datei mit, sagt 10 Zeilen, von denen 4 Leerstellen sind, würde als 6 zu verarbeitende Zeilen gelesen werden. Die Zeilennummer gegeben habe angewandt werden (also gelöscht) aus den sechs Datenleitungen und 10 den Start nicht

bearbeiten
etwas zu schnell ging, nicht akf Antwort sehen, die Mine ganz nah sieht .

Verwandte Themen