Question

Je veux un fichier batch qui:. Supprime une certaine ligne [line number by %lnum%] dans un fichier txt

Était-ce utile?

La solution

Cela ressemble à un travail pour sed. Sur les fenêtres, il vous faudrait installer un port windows et ensuite appeler sed de l'intérieur votre fichier batch.

sed '<linenumber>d' filename > newfilename

Pour supprimer la 4ème ligne:

sed '4d' filename > newfilename

Autres conseils

Si vous êtes sous Windows et que vous voulez le faire dans un fichier de commandes, vous pouvez effectuer les opérations suivantes par la force brute:

@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%

Vous passez dans le lot le nom de votre fichier cible et le numéro de ligne que vous souhaitez supprimer. Il crée un fichier temporaire, les tuyaux lignes « bons » de votre original dans la température, puis finit par renommer les fichiers afin que vous gardiez votre original et avoir le fichier modifié en place.

cmd pur:

delline.cmd nombre nom

@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

___ Remarques _____ 1 Aucun contrôle pour les paramètres. Tout d'abord besoin d'être un numéro, le second un fichier ou un chemin + fichier.
2. Comme avec d'autres réponses, aucun fichier temporaire soit
3: Utilisation setlocal vous permettra d'intégrer ce code facile dans un script en le nommant : DelLine et l'utiliser comme: Appel: DelLine nombre fichier

ATTENTION: Toute ligne vide du fichier source serait ignorée / perdue dans le processus de lecture (par le for..loop ). Un fichier, dit 10 lignes dont 4 sont des ébauches, seraient lues comme 6 lignes à traiter. Le numéro de ligne donné serait appliquée (ainsi, supprimer) des 6 lignes de données, et non pas à partir 10.

Modifier Je suis allé un peu trop vite, n'a pas vu la réponse de AKF qui semble vraiment proche de la mienne.

ne pas utiliser une commande externe. vous pouvez utiliser 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

comment utiliser:

C:\test>cscript /nologo removeline.vbs 4 file.txt > newfile.txt
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top