أمر (أوامر) Windows الدفعية لقراءة السطر الأول من الملف النصي
-
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%
وهو قيد التشغيل.