Lot: ligne et supprimer
-
16-09-2019 - |
Question
Je veux un fichier batch qui:. Supprime une certaine ligne [line number by %lnum%]
dans un fichier txt
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