ฉันโพสต์รหัสทั้งหมดด้านล่าง แต่เนื้อจริงอยู่ที่นี่:
:: set counter
set c=0
for /f "delims=|" %%i in (%1) do (
:: increment counter for each line read
set /a c=!c!+1
if !c! leq %3 echo %%i >> %2
)
โดยทั่วไปคุณตั้งค่าตัวแปรตัวนับ c เป็น 0 จากนั้นเพิ่มขึ้นสำหรับแต่ละบรรทัดที่อ่านจากไฟล์ข้อความ คุณทดสอบตัวนับกับบรรทัดสูงสุดและ echo ไปยังแฟ้มผลลัพธ์ถ้ามันน้อยกว่าหรือเท่ากับ
"delims=|"
พารามิเตอร์ในการห่วงช่วยให้มันจากการทำลายเส้นเข้าไปในราชสกุลที่อักขระช่องว่างและทำให้การแสดงผลเพียงเส้นบางส่วน !c!
ตัวแปรที่ผิดปกติคือวิธีการอ้างอิงตัวแปรที่ใช้การขยายตัวล่าช้า หากคุณเพิ่งใช้%c%
ค่าจะไม่เปลี่ยนแปลงภายในfor
ลูป
คุณจัดเตรียมสคริปต์ด้วยพารามิเตอร์สามตัว ได้แก่ ไฟล์อินพุตไฟล์เอาต์พุตและ # ของบรรทัดที่ส่งออก % 1,% 2 และ% 3 แสดงถึงพารามิเตอร์อินพุตแต่ละตัวในสคริปต์
@echo off
REM ======================================================================
REM
REM NAME:
REM
REM AUTHOR: Scott McKinney
REM DATE :
REM
REM PURPOSE:
REM COMMENT:
REM DEPENDENCIES:
REM
REM Revisions:
REM
REM ======================================================================
setlocal ENABLEEXTENSIONS
setlocal ENABLEDELAYEDEXPANSION
set a=%1
if "%1"=="" goto HELP
if "%a:~0,2%"=="/?" goto HELP
if "%a:~0,2%"=="-?" goto HELP
if "%a:~0,2%"=="/h" goto HELP
if "%a:~0,2%"=="/H" goto HELP
if "%a:~0,2%"=="-h" goto HELP
if "%a:~0,2%"=="-H" goto HELP
if "%a:~0,3%"=="--h" goto HELP
if "%a:~0,3%"=="--H" goto HELP
:: set counter
set c=0
for /f "delims=|" %%i in (%1) do (
:: increment counter for each line read
set /a c=!c!+1
if !c! leq %3 echo %%i >> %2
)
goto END
:HELP
echo.
echo Usage: %0 ^<input file^> ^<output file^> ^<n lines^>
echo.
echo. Outputs the first ^<n^> lines from ^<input file^> to ^<output file^>.
echo.
:END