سؤال

أريد ملف دفعي: يزيل خط معين [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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top