我有一堆的.txt文件,我想从一个特定的列(从所有这些)复制到一个.txt文件。 output.txt文件需要被创build
例如
file1.txt abc jkl file2.txt def mno file3.txt ghi pqr output.txt beh knq
对于相同的我正在寻找一个batch file在Windows中,可以帮助我实现这一点。 任何forms的帮助将非常感激 :)。 如果这听起来是一个非常基本的问题,我就是批量编写脚本的新手。
这个批处理解决方案将从文件夹中的每个文件的所有行取第二个字符,并将其输出到output.txt
,哇,这真是一口! 🙂
for %%a in (file*.txt) do ( for /f "tokens=2 delims= " %%b in (%%a) do echo %%b >>output.txt )
让他们排队会更困难,是严格必要的,还是他们可以在列表中,每行一个字符?
这可能不是你正在寻找的答案,但是我在处理批处理文件中的字符串时有一个类似的问题,虽然不是确切的问题。 我变得非常沮丧,我最终学习和使用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.
这将它打印到屏幕上,从这里写出来的文件是微不足道的。
编辑:做不同的方式 (可能更直接),这个有另一个限制 – 可用变量/ env的大小。 空间(对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
来将行的块转换为列以开始新行(最后一个块) 笔记:
"tab= "
(在第三行)必须包含实际的选项卡 tab
排序)。 !
输入中的字符(当延迟扩展开启时,需要特殊处理) mybatchfile.bat >output.txt