Ich möchte eine Batch-Datei, die: eine bestimmte Zeile [line number by %lnum%]
in einer TXT-Datei entfernt.Batch: Linie & entfernen
Antwort
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
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.
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
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 .
hmmm ... wenn ich sed installiert und meinen Computer neu gestartet habe, wurde es von CMD nicht gefunden. Ich habe Win7. –
oh, ich weiß wie es jetzt funktioniert. –