أمر (أوامر) Windows الدفعية لقراءة السطر الأول من الملف النصي

StackOverflow https://stackoverflow.com/questions/130116

  •  02-07-2019
  •  | 
  •  

سؤال

كيف يمكنني قراءة السطر الأول من ملف نصي باستخدام ملف دفعي يعمل بنظام Windows؟وبما أن الملف كبير أريد فقط التعامل مع السطر الأول.

هل كانت مفيدة؟

المحلول

إليك ملف دفعي للأغراض العامة لطباعة الجزء العلوي n أسطر من ملف مثل GNU head فائدة، بدلا من مجرد سطر واحد.

@echo off

if [%1] == [] goto usage
if [%2] == [] goto usage

call :print_head %1 %2
goto :eof

REM
REM print_head
REM Prints the first non-blank %1 lines in the file %2.
REM
:print_head
setlocal EnableDelayedExpansion
set /a counter=0

for /f ^"usebackq^ eol^=^

^ delims^=^" %%a in (%2) do (
        if "!counter!"=="%1" goto :eof
        echo %%a
        set /a counter+=1
)

goto :eof

:usage
echo Usage: head.bat COUNT FILENAME

على سبيل المثال:

Z:\>head 1 "test file.c"
; this is line 1

Z:\>head 3 "test file.c"
; this is line 1
    this is line 2
line 3 right here

ولا يقوم حاليًا بحساب الأسطر الفارغة.ويخضع أيضًا لقيود طول سطر الملف الدفعي وهو 8 كيلو بايت.

نصائح أخرى

أوه؟المنظمة البحرية الدولية هذا هو أبسط من ذلك بكثير

  set /p texte=< file.txt  
  echo %texte%

اه يا شباب...

C:\>findstr /n . c:\boot.ini | findstr ^1:

1:[boot loader]

C:\>findstr /n . c:\boot.ini | findstr ^3:

3:default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

C:\>

يمكنك تجربة هذا:

@echo off

for /f %%a in (sample.txt) do (
  echo %%a
  exit /b
)

يحررأو لنفترض أن لديك أربعة أعمدة من البيانات وتريد الانتقال من الصف الخامس إلى الأسفل، جرب ما يلي:

@echo off

for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
  echo %%a %%b %%c %%d
)

بفضل thetalkingwalnut مع الإجابة أمر (أوامر) Windows الدفعية لقراءة السطر الأول من الملف النصي لقد توصلت إلى الحل التالي:

@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)

البناء قليلاً على إجابات الأشخاص الآخرين.يتيح لك الآن تحديد الملف الذي تريد القراءة منه والمتغير الذي تريد وضع النتيجة فيه:

@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)

هذا يعني أنه يمكنك استخدام ما ورد أعلاه على هذا النحو (على افتراض أنك أطلقت عليه اسم getline.bat)

c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable  
variable= Volume in drive C has no label.

بطانة واحدة مفيدة لإعادة توجيه stdout باستخدام ">":

@for /f %%i in ('type yourfile.txt') do @echo %%i & exit

جرب هذا

@echo off
setlocal enableextensions enabledelayedexpansion
set firstLine=1
for /f "delims=" %%i in (yourfilename.txt) do (
    if !firstLine!==1 echo %%i
    set firstLine=0
)
endlocal

المشكلة مع EXIT /B الحلول، عندما تكون أكثر واقعية داخل ملف دفعي حيث أن جزءًا واحدًا منه فقط هو ما يلي.لا توجد معالجة لاحقة داخل الملف الدفعي المذكور بعد EXIT /B.عادةً ما تكون الدُفعات أكثر بكثير من مجرد مهمة واحدة محدودة.

لمواجهة تلك المشكلة:

@echo off & setlocal enableextensions enabledelayedexpansion
set myfile_=C:\_D\TEST\My test file.txt
set FirstLine=
for /f "delims=" %%i in ('type "%myfile_%"') do (
  if not defined FirstLine set FirstLine=%%i)
echo FirstLine=%FirstLine%
endlocal & goto :EOF

(ومع ذلك، فإن ما يسمى بالشخصيات السامة سيظل يمثل مشكلة.)

المزيد عن موضوع الحصول على سطر معين بأوامر دفعية:

كيف يمكنني الحصول على السطر الأول والسطر الأخير من ملف نصي؟" http://www.netikka.net/tsneti/info/tscmd023.htm

[أضيفت في 28 أغسطس 2012] يمكن للمرء أيضًا الحصول على:

@echo off & setlocal enableextensions
set myfile_=C:\_D\TEST\My test file.txt
for /f "tokens=* delims=" %%a in (
  'type "%myfile_%"') do (
    set FirstLine=%%a& goto _ExitForLoop)
:_ExitForLoop
echo FirstLine=%FirstLine%
endlocal & goto :EOF

هنا هو الحل باستخدام powershell:

powershell (Get-Content file.txt)[0]

(يمكنك أيضًا قراءة مجموعة من السطور بسهولة باستخدام powershell (Get-Content file.txt)[0..3])

إذا كنت بحاجة إلى تعيين متغير داخل برنامج نصي دفعي باعتباره السطر الأول من file.txt يمكنك استخدام:

for /f "usebackq delims=" %%a in (`powershell ^(Get-Content file.txt^)[0]`) do (set "head=%%a")

لاحظ أن طرق الملفات الدفعية ستقتصر على حد السطر لمعالج أوامر DOS - راجع ما هو الحد الأقصى لطول سطر الأوامر؟.

لذلك إذا كنت تحاول معالجة ملف يحتوي على أي أسطر أكثر من ذلك 8192 الأحرف التي سيتخطاها البرنامج النصي فقط لأنه لا يمكن الاحتفاظ بالقيمة.

طريق اخر

setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))

لتدوير ملف (file1.txt, file1[1].txt, file1[2].txt, ، إلخ.):

START/WAIT C:\LAERCIO\DELPHI\CICLADOR\dprCiclador.exe C:\LAERCIUM\Ciclavel.txt

rem set/p ciclo=< C:\LAERCIUM\Ciclavel.txt:
set/p ciclo=< C:\LAERCIUM\Ciclavel.txt

rem echo %ciclo%:
echo %ciclo%

وهو قيد التشغيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top