如何使用cmd合并多个tmp文件的前N个单词
How to merge the first N words of multiple tmp files using cmd
如何用cmd合并多个tmp文件的前N个单词。我尝试合并第一行,但是当我检查文本文件时,tmp 文件中每行显示 4 行
示例:
TMP 文件 1:
文件名称:GALILEO1
内容:
SAMPLE WORDS TO GET THE FIRST EIGHT WORD1 FOR EACH FILE
SAMPLE WORDS TO GET THE FIRST EIGHT WORDS FOR EACH FILE
SAMPLE WORDS TO GET THE FIRST EIGHT WORDS FOR EACH FILE
TMP 文件 2:
文件名称:GALILEO2
内容:
SAMPLE WORDS TO GET THE FIRST EIGHT WORD2 FOR EACH FILE
SAMPLE WORDS TO GET THE FIRST EIGHT WORDS FOR EACH FILE
SAMPLE WORDS TO GET THE FIRST EIGHT WORDS FOR EACH FILE
所需的 TXT 输出:
GALILEO1.TMP SAMPLE WORDS TO GET THE FIRST EIGHT WORD1
GALILEO2.TMP SAMPLE WORDS TO GET THE FIRST EIGHT WORD2
tmp 文件在一行中包含多个单词,但当我使用以下代码提取它时,文本文件显示为 4 行。
@echo off
setlocal EnableDelayedExpansion
if exist galileo.txt del galileo.txt
for %%f in (*.tmp) do (
set i=0
for /F "delims=" %%l in (%%f) do (
set /A i+=1
set line!i!=%%l
)
echo %%f, Galileo !line1! >> galileo.txt
)
假定 first 行的前 N 个词,而不是全部:
- 用
Set /p
读取第一行并重定向到一个变量
- 使用
for /f
解析前 8 个(space/tab 分隔的)单词。
:: Q:\Test18\SO_52396744.cmd
@echo off
setlocal EnableDelayedExpansion
if exist galileo.txt del galileo.txt
set i=0
( for %%f in (*.tmp) do (
set /A i+=1
Set /P "line="<%%f
for /F "tokens=1-8" %%A in ('echo:!line!') do (
echo Galileo!i!.TMP %%A %%B %%C %%D %%E %%F %%G %%H
)
)
) > galileo.txt
示例输出:
> type galileo.txt
Galileo1.TMP SAMPLE WORDS TO GET THE FIRST EIGHT WORD1
Galileo2.TMP SAMPLE WORDS TO GET THE FIRST EIGHT WORD2
如果文件不大,可以在.bat文件脚本中使用下面的PowerShell脚本。这会将每行的前八 (8) 个单词交织到一个新文件中。
是的。我知道您没有要求 PowerShell 解决方案。这是任何当前 Windows 系统上的另一个选项。
powershell -NoProfile -Command ^
"$output_file = '.\galileo.txt';" ^
"" ^
"$f1 = Get-Content -Path '.\galileo1.txt';" ^
"$f2 = Get-Content -Path '.\galileo2.txt';" ^
"" ^
"if (Test-Path -Path $output_file) { Remove-Item -Path $output_file };" ^
"" ^
"$maxline = [Math]::max($f1.Length, $f2.Length);" ^
"" ^
"for ($i=0; $i -lt 5; $i++) {" ^
" if ($f1[$i]) {" ^
" $a = $f1[$i].Split();" ^
" $s = $a[0..7] -join ' ';" ^
" Out-File -InputObject $s -FilePath $output_file -Append -Encoding ascii" ^
" };" ^
" if ($f2[$i]) {" ^
" $a = $f2[$i].Split();" ^
" $s = $a[0..7] -join ' ';" ^
" Out-File -InputObject $s -FilePath $output_file -Append -Encoding ascii" ^
" };" ^
"}" ^
如果将此代码放入文件中(例如 merge.ps1),可以通过以下方式从 .bat 文件脚本中调用它:
powershell -NoProfile -File .\merge.ps1
这将是合并的内容。ps1。
$output_file = '.\galileo.txt'
$f1 = Get-Content -Path .\galileo1.txt
$f2 = Get-Content -Path .\galileo2.txt
if (Test-Path -Path $output_file) { Remove-Item -Path $output_file }
$maxline = [Math]::max($f1.Length, $f2.Length)
for ($i=0; $i -lt 5; $i++) {
if ($f1[$i]) {
$a = $f1[$i].Split()
$s = $a[0..7] -join ' '
Out-File -InputObject $s -FilePath $output_file -Append -Encoding ascii
}
if ($f2[$i]) {
$a = $f2[$i].Split()
$s = $a[0..7] -join ' '
Out-File -InputObject $s -FilePath $output_file -Append -Encoding ascii
}
}
如何用cmd合并多个tmp文件的前N个单词。我尝试合并第一行,但是当我检查文本文件时,tmp 文件中每行显示 4 行
示例:
TMP 文件 1: 文件名称:GALILEO1 内容:
SAMPLE WORDS TO GET THE FIRST EIGHT WORD1 FOR EACH FILE
SAMPLE WORDS TO GET THE FIRST EIGHT WORDS FOR EACH FILE
SAMPLE WORDS TO GET THE FIRST EIGHT WORDS FOR EACH FILE
TMP 文件 2: 文件名称:GALILEO2 内容:
SAMPLE WORDS TO GET THE FIRST EIGHT WORD2 FOR EACH FILE
SAMPLE WORDS TO GET THE FIRST EIGHT WORDS FOR EACH FILE
SAMPLE WORDS TO GET THE FIRST EIGHT WORDS FOR EACH FILE
所需的 TXT 输出:
GALILEO1.TMP SAMPLE WORDS TO GET THE FIRST EIGHT WORD1
GALILEO2.TMP SAMPLE WORDS TO GET THE FIRST EIGHT WORD2
tmp 文件在一行中包含多个单词,但当我使用以下代码提取它时,文本文件显示为 4 行。
@echo off
setlocal EnableDelayedExpansion
if exist galileo.txt del galileo.txt
for %%f in (*.tmp) do (
set i=0
for /F "delims=" %%l in (%%f) do (
set /A i+=1
set line!i!=%%l
)
echo %%f, Galileo !line1! >> galileo.txt
)
假定 first 行的前 N 个词,而不是全部:
- 用
Set /p
读取第一行并重定向到一个变量 - 使用
for /f
解析前 8 个(space/tab 分隔的)单词。
:: Q:\Test18\SO_52396744.cmd
@echo off
setlocal EnableDelayedExpansion
if exist galileo.txt del galileo.txt
set i=0
( for %%f in (*.tmp) do (
set /A i+=1
Set /P "line="<%%f
for /F "tokens=1-8" %%A in ('echo:!line!') do (
echo Galileo!i!.TMP %%A %%B %%C %%D %%E %%F %%G %%H
)
)
) > galileo.txt
示例输出:
> type galileo.txt
Galileo1.TMP SAMPLE WORDS TO GET THE FIRST EIGHT WORD1
Galileo2.TMP SAMPLE WORDS TO GET THE FIRST EIGHT WORD2
如果文件不大,可以在.bat文件脚本中使用下面的PowerShell脚本。这会将每行的前八 (8) 个单词交织到一个新文件中。
是的。我知道您没有要求 PowerShell 解决方案。这是任何当前 Windows 系统上的另一个选项。
powershell -NoProfile -Command ^
"$output_file = '.\galileo.txt';" ^
"" ^
"$f1 = Get-Content -Path '.\galileo1.txt';" ^
"$f2 = Get-Content -Path '.\galileo2.txt';" ^
"" ^
"if (Test-Path -Path $output_file) { Remove-Item -Path $output_file };" ^
"" ^
"$maxline = [Math]::max($f1.Length, $f2.Length);" ^
"" ^
"for ($i=0; $i -lt 5; $i++) {" ^
" if ($f1[$i]) {" ^
" $a = $f1[$i].Split();" ^
" $s = $a[0..7] -join ' ';" ^
" Out-File -InputObject $s -FilePath $output_file -Append -Encoding ascii" ^
" };" ^
" if ($f2[$i]) {" ^
" $a = $f2[$i].Split();" ^
" $s = $a[0..7] -join ' ';" ^
" Out-File -InputObject $s -FilePath $output_file -Append -Encoding ascii" ^
" };" ^
"}" ^
如果将此代码放入文件中(例如 merge.ps1),可以通过以下方式从 .bat 文件脚本中调用它:
powershell -NoProfile -File .\merge.ps1
这将是合并的内容。ps1。
$output_file = '.\galileo.txt'
$f1 = Get-Content -Path .\galileo1.txt
$f2 = Get-Content -Path .\galileo2.txt
if (Test-Path -Path $output_file) { Remove-Item -Path $output_file }
$maxline = [Math]::max($f1.Length, $f2.Length)
for ($i=0; $i -lt 5; $i++) {
if ($f1[$i]) {
$a = $f1[$i].Split()
$s = $a[0..7] -join ' '
Out-File -InputObject $s -FilePath $output_file -Append -Encoding ascii
}
if ($f2[$i]) {
$a = $f2[$i].Split()
$s = $a[0..7] -join ' '
Out-File -InputObject $s -FilePath $output_file -Append -Encoding ascii
}
}