ファイルから最初のX行の行を抽出/コピーし、Windowsコマンドプロンプトを使用して単一のコマンドで別のファイルに入力する方法はありますか?
以下を使用して、最初のX行の行を削除できます。
more + X [ファイルを含むデータ]> [ファイル_to_export_data_to]
Headコマンドが機能する場合、私はこれを行うことができると思います:
head -X [ファイルを含むデータ]> [ファイル_to_export_data_to]
しかし、残念ながらそれは機能しません。
Windowsに「少ない」コマンドがあったとしても、幸運はありませんでした。
私はこのことに関しては完全に初心者なので、明らかな何かを見逃していると確信しています。コマンドプロンプト以外のものをインストールしたり使用したりしません。
ありがとう
最も簡単なワンコマンドソリューションは、Powershell Get-Contentを使用することです。
N-行数。
ファイルの先頭から:
Get-Content -Head N file.txt
ファイルの終わりから:
Get-Content -Tail N file.txt
PowerShellは、cmd.exeコンソールから使用できます。
powershell -command "& {get-content input.txt|select-object -first 10}" >output.txt
DOSKEYマクロを作成して、コマンドラインから使いやすくすることができます。
doskey head=powershell -command "& {get-content $1|select-object -first $2}"
使用法:
head input.txt 10 >output.txt
ただし、バッチスクリプト内でDOSKEYマクロを使用することはできません。
代わりにhead.batスクリプトを作成して、PATHに含まれるフォルダーに配置できます。
head.bat
@powershell -command "& {get-content %1|select-object -first %2}"
コマンドラインから、head input.txt 10 >output.txt
を使用します
バッチスクリプト内から、call head input.txt 10 >output.txt
を使用します
ファイルに書き込むのではなく、単に画面に結果を表示する場合に備えて、出力ファイルをパラメーターとして使用しないことを選択しました。
(@FOR /f "tokens=1* delims=:" %a IN ('findstr /n "^" "standardwaffle.txt"') DO @IF %a leq 7 ECHO(%b)>u:\junk.txt
standardwaffle.txt
の最初の7行をu:\junk.txt
に抽出するので、ここではcmd
行になりますが、確実に入力することはできません。
また、ソース行の先頭の:
も削除されます。
@ECHO OFF
SETLOCAL
IF %1 lss 0 (SET /a line=-%1) ELSE (SET /a line=%1)
FOR /f "tokens=1* delims=:" %%a IN ('findstr /n "^" "%~2"') DO IF %%a leq %line% ECHO(%%b
GOTO :EOF
パス上の任意の場所に配置されたhead.bat
として保存されたこのバッチを使用すると、
head -n standardwaffle.txt >junk.txt
standardwaffle.txt
の最初のn
行をjunk.txt
に抽出します
-
はオプションです
butこれには、マシンへのバッチのインストールが含まれます。それは「インストールなし」の要件によって禁止されていますか、それとも「インストール」はサードパーティのユーティリティのみを対象としていますか?
Set Inp = WScript.Stdin
Set Outp = Wscript.Stdout
x = 0
Do Until Inp.AtEndOfStream
x = x + 1
OutP.WriteLine Inp.Readline
If x = 5 then Exit Do
Loop
これにより、行1〜5が印刷されます。
cscript //nologo <path to script.vbs> <inputfile >outputfile
正しいutf8出力を取得するには、powershellで以下を実行します
chcp 65001
$OutputEncoding = New-Object -typename System.Text.UTF8Encoding
get-content input.txt -encoding UTF8 |select-object -first 10000 > output.txt
これにより、input.txt(utf8形式のファイル)の最初の10000行が、正しいエンコーディングでoutput.txtに取得されます。
これを使用できます:
break>"%temp%\empty"&&fc "%temp%\empty" "%file_to_process%" /lb X /t |more +4 | findstr /B /E /V "*****"
[〜#〜] x [〜#〜]を必要な行に置き換える必要があります。または、この名前をhead.bat
:
break>"%temp%\empty"&&fc "%temp%\empty" "%file_to_process%" /lb %~1 /t |more +4 | findstr /B /E /V "*****"
単純なWindowsコマンドに固執したい場合はこれを使用できますが、大きなファイルでは少し遅くなります;-)(以下に2番目のソリューションを追加しました:-)これは任意の長さの最後の100レコードを抽出しますファイル)
find /n " " <test.txt >test.tmp
for /l %%i in (1,1,100) do find "[%%i]" <test.tmp >test.tmp2
for /f "delims=] tokens=2" %%i in (test.tmp2) do echo %%i >>test.new
del test.tmp
del test.tmp2
move /y test.new test.txt
find /v /n "" <test.txt >test.tmp
for /f "delims=: tokens=2 %%i in ('find /v /c "" test.txt') do set /a NR=%%i
set /a NS=%NR%-100
for /l %%i in (%NS%, 1, %NR%) do find "[%%i]" <test.tmp >>test.tmp2
for /f %%i "delims=] tokens=2 %%i in (test.tmp2) do echo %%i >>test.new
move /y test.new test.txt