2016-04-30 1 views
2

Эй, ребята, мне нужна ваша помощь. В этом я любитель. Я много пробовал решить это, не смог.копирование нескольких строк из одного текста в другой с помощью командного файла

@ECHO off 

C: 

CD "C:\Program Files (x86)\GnuWin32\bin" 

SED = "G:\mini thesis\New folder\input.txt" > "G:\mini thesis\New folder\output.txt" 

sed 1p,3p G:\mini thesis\New folder\input.txt>G:\mini thesis\New folder\output.txt 

этот код копирует все строки от ввода до вывода, и я не знаю, что случилось.


@echo off 
setlocal 

(set /P "line1=" & set /P "line2=") < input.txt 
(
    echo %line1% 
    echo %line2% 

) > output.txt 

Я хочу, чтобы скопировать от 22 линии до 84th линии, но я не знаю, какой синтаксис использовать пожалуйста, помогите мне, ребята

ответ

0

Вы можете попробовать этот гибридный код Batch и VBScript в достичь своей цели:

@echo off 
Rem Just Change those params to yours ie InputFile and OutPutFile 
Set "InputFile=C:\temp\Input.txt" 
Set "OutPutFile=C:\temp\Output.txt" 
Set FromLine=22 
Set ToLine=84 
::******************************************************************************************************** 
Call:ExtractLinesFromTextFile "%InputFile%" %FromLine% %ToLine% > "%OutPutFile%" 
If Exist "%OutPutFile%" Start "" "%OutPutFile%" 
Exit /b 
::******************************************************************************************************** 
:ExtractLinesFromTextFile <InputFile> <FromLine> <ToLine> 
(
    echo Wscript.echo(ExtractLinesFromTextFile("%~1",%2,%3^)^) 
    echo Function ExtractLinesFromTextFile(TextFile,FromLine,ToLine^) 
    echo  If FromLine ^<= ToLine Then 
    echo   With CreateObject("Scripting.FileSystemObject"^).OpenTextFile(TextFile^) 
    echo    Do Until .Line = FromLine Or .AtEndOfStream 
    echo     .SkipLine 
    echo    Loop 
    echo    Do Until .Line ^> ToLine Or .AtEndOfStream 
    echo     ExtractLinesFromTextFile = ExtractLinesFromTextFile ^& (.ReadLine ^& vbNewLine^) 
    echo    Loop 
    echo   End With 
    echo  Else 
    echo   Wscript.echo "Lines overflow error", vbCritical, "Lines overflow error" 
    echo  End If 
    echo End Function 
)>"%~n0.vbs" 
Cscript /Nologo "%~n0.vbs" "%~1" %~2 %~3 
If Exist "%~n0.vbs" Del "%~n0.vbs" 
Exit /b 
::******************************************************************************************************** 
0

Чтобы прочитать определенную строку из текстового файла, используйте for /F с skip опции и goto т o разбить петлю. Каждая строка предваряется номером строки по findstr с перерывами, чтобы не потерять пустые строки:

rem This reads the 22nd line of a text file: 
for /F "skip=21 delims=" %%L in ('findstr /N /R "^" "input.txt"') do (
    set "LINE=%%L" 
    setlocal EnableDelayedExpansion 
    echo(!LINE:*:=! 
    endlocal 
    goto :CONT 
) 
:CONT 

Чтобы написать (заменить) определенную линию (в) текстовый файл, вам нужно прочитать текст, заменить строка и записать результат в промежуточный (временный) файл; наконец, переместите промежуточный файл в исходный файл (и перезапишите его). Подпрограмма :SUB содержит в основном фрагмент кода:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem Define constants here: 
set "INFILE=input.txt" 
set "OUTFILE=output.txt" 
set "TEMPFILE=%TEMP%\interim.txt" 
set "INLINE=22" 
set "OUTLINE=84" 

rem This reads a text file and replaces a certain line: 
> "%TEMPFILE%" (
    for /F "delims=" %%F in ('findstr /N /R "^" "%OUTFILE%"') do (
     set "LINE=%%F" 
     for /F "delims=:" %%N in ("%%F") do set "LNUM=%%N" 
     setlocal EnableDelayedExpansion 
     if !LNUM! EQU %OUTLINE% (
      call :SUB 
     ) else (
      echo(!LINE:*:=! 
     ) 
     endlocal 
    ) 
) 
> nul 2>&1 move /Y "%TEMPFILE%" "%OUTFILE%" 

endlocal 
exit /B 

:SUB 
rem This reads a certain line from a text file: 
set /A SKIP=INLINE-1 
if %SKIP% GTR 0 (set "SKIP=skip=%SKIP% ") else (set "SKIP=") 
for /F "%SKIP%delims=" %%L in ('findstr /N /R "^" "%INFILE%"') do (
    set "LINE=%%L" 
    setlocal EnableDelayedExpansion 
    echo(!LINE:*:=! 
    endlocal 
    goto :EOF 
)