我有一堆 .txt 文件,我想将特定列(从所有这些列)复制到一个 .txt 文件中。需要创建 output.txt 文件
例如
file1.txt
a b c
j k l
file2.txt
d e f
m n o
file3.txt
g h i
p q r
output.txt
b e h
k n q
同样,我正在寻找可以帮助我实现这一目标的 Windows 批处理文件。任何形式的帮助将非常感激 :)。我只是批处理脚本的新手,因此如果这听起来是一个非常基本的问题,请原谅我。
我有一堆 .txt 文件,我想将特定列(从所有这些列)复制到一个 .txt 文件中。需要创建 output.txt 文件
例如
file1.txt
a b c
j k l
file2.txt
d e f
m n o
file3.txt
g h i
p q r
output.txt
b e h
k n q
同样,我正在寻找可以帮助我实现这一目标的 Windows 批处理文件。任何形式的帮助将非常感激 :)。我只是批处理脚本的新手,因此如果这听起来是一个非常基本的问题,请原谅我。
这可能不是您要寻找的答案,但是在处理批处理文件中的字符串时,我遇到了类似但不完全的问题。我变得非常沮丧,最终学习并使用了python。
在 Python 中,这很简单:
for i in range(1,4):
f='c:\\file'+str(i)+'.txt' # Creates a variable for file1.txt, file2.txt formatted as c:\file1.txt. Path can be changed as needed.
f = open(f) # Opens the file
string=f.read() # Adds the contents of the file to a string
print(string.split('\t')[1]+'\t'+string.split('\t')[4]) # splits the string by tabs, and returns the 2nd and 5th item.
这会将其打印到屏幕上,从这里将其写入文件是微不足道的。
这个批处理解决方案将从文件夹中每个文件的所有行中取出第二个字符并将它们输出到output.txt
,哇,真是一口!:)
for %%a in (file*.txt) do (
for /f "tokens=2 delims= " %%b in (%%a) do echo %%b >>output.txt
)
让他们排队会更加困难,这是绝对必要的,还是他们可以在列表中,每行一个字符?
编辑:这样做的不同方式(可能更直接),这个有另一个限制 - 可用变量/环境的大小。空间(对于 XP,大约为 32kB,不限于 Vista 向上 - 至少每个 MS 文档)。它创建一种数组变量来保存你的转置行,然后输出它们:
@echo off
setlocal enabledelayedexpansion
set "tab= "
for %%F in (file*.txt) do (
set /a count=0
for /f "tokens=2 delims=%tab%" %%L in (%%F) do (
set /a count+=1
for /L %%T in (!count!,1,!count!) do (
set L[!count!]=!L[%%T]!%%L%tab%
)
)
)
for /L %%L in (1,1,%count%) do echo !L[%%L]!
首先,让我说这batch
不是最适合这项任务(这本来是微不足道的,在 中说C
),但如果你必须使用它,这里有一种方法:
@echo off
setlocal enabledelayedexpansion
set "tab= "
for /f %%C in ('dir /b file*.txt') do set /a count+=1
(for %%F in (file*.txt) do (
set line=0
for /f "tokens=2 delims=%tab%" %%V in (%%F) do (
set "outline=%%F"
for /l %%N in (1,1,!line!) do (set "outline=%tab%!outline!")
set outline=!outline!%tab%%%V
set /a line+=1
echo !outline!
)
)) >presorted.txt
set /a cutoff=%count%-1
set line=0
for /f "tokens=2 delims=%tab%" %%O in ('sort /r presorted.txt') do (
set outp=%%O%tab%!outp!
set /a lc=!line!^%%count%
if !lc!==%cutoff% (
echo !outp!
set "outp="
)
set /a line+=1
)
这个怎么运作:
for
和count
可变)()
) sort /r presorted.txt
)modulo count
使用开始新行(最后一个for
块)将行块转置为列笔记:
"tab= "
(在第 3 行)必须包含实际选项卡tab
在任何可打印字符之前排序)。!
输入中没有字符(当延迟扩展打开时,它们需要特殊处理)mybatchfile.bat >output.txt