2016-04-30 2 views
2

あなたの助けが必要です。私はこれで素人です。私はこれを解決するために多くを試みたが、できなかった。バッチファイルで1つのテキストから他のテキストへ少数の行をコピー

@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 

私は第84行に22行からコピーしたいが、私は を使用する構文を知らない私を助けてください、みんな

答えて

0

あなたはこのハイブリッドコードのバッチや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

テキストファイルから特定の行を読み取るには、skipオプションとgotoトンでfor /Fを使用ループを壊す。置き換え、(置換)テキストファイル(中)、テキストを読む必要があるために、特定の行を書き込むには

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 

:各ラインは空行を失わないために、断続的にfindstrで行番号を先行され中間ファイル(一時ファイル)に結果を書き込む。最後に、中間ファイルを元のファイルに移動して上書きします。サブルーチン: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 
) 
関連する問題