سؤال
أريد ملف دفعي: يزيل خط معين [line number by %lnum%]
في ملف txt.
المحلول
هذا يبدو وكأنه وظيفة ل sed
. وبعد على ويندوز، يجب عليك تثبيت منفذ ويندوز ثم اتصل ب SED من داخل ملف الدفعات الخاص بك.
sed '<linenumber>d' filename > newfilename
لحذف الخط الرابع:
sed '4d' filename > newfilename
نصائح أخرى
إذا كنت في Windows وتريد القيام بذلك في ملف دفعي، فيمكنك القيام بما يلي بالقوة الغاشمة:
@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%
تمر في الدفعة اسم الملف المستهدف ورقم السطر الذي تريد إزالته. يقوم بإنشاء ملف مؤقت، وأنابيب "خطوط" جيدة "من الأصلي في TEMP ثم تنتهي من خلال إعادة تسمية الملفات بحيث تحتفظ بأصلك الأصلي ولديك الملف المعدل في مكانه.
CMD نقية؟:
delline.cmd. رقم اسم الملف
@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
___ملاحظات_____
1: لا الشيكات للمعلمات. الحاجة الأولى تكون عددا، والكمبيوتر الثاني ملف أو مسار + ملف.
2: كما هو الحال مع الإجابات الأخرى، لا يوجد ملف مؤقت أيضا.
3: سيتيح لك استخدام SetLocal دمج هذا الرمز سهل في البرنامج النصي عن طريق تسمية ذلك : Delline. واستخدامها مثل: اتصل: Delline. رقم ملف
تحذير: سيتم تخطي أي سطر فارغ من الملف المصدر / فقد في عملية القراءة (من قبل لحلقة). ملف مع، يقول 10 خطوط من أيهما 4 فراغات، وسيتم قراءة ك 6 أسطر معالجتها. سيتم تطبيق رقم السطر المعطى (وهكذا، حذف) من خطوط البيانات 6، وليس البداية 10.
يحرر
ذهب بسرعة كبيرة، لم ير إجابة AKF التي تبدو قريبة من الألغام.
لا تضطر إلى استخدام أي أمر خارجي. يمكنك استخدام 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
كيف تستعمل:
C:\test>cscript /nologo removeline.vbs 4 file.txt > newfile.txt