我正在寻找合并2个文本文件而不创建换行符的代码。
目前我正在使用此代码。
@echo off
setlocal enabledelayedexpansion
set fd1=\folderpath1\
set fd2=\folderpath2\
set MrgFiles=\outputfolder\
pushd "%fd1%"
for /f "tokens=1* delims=" %%a in ('dir /b /a-d "!fd1!"') do (
if exist "!fd2!\%%a" (
type "%%~fa">"!MrgFiles!\%%a"
echo.>>"!MrgFiles!\%%a"
type "!fd2!\%%a">>"!MrgFiles!\%%a"
)
)
popd
我的设置目前正是这样的
Folder 1 has 100 files in it.
Each file has 1 line
Example:
Line 1
Folder 2 has 100 files in it.
Each file has 1 line.
Example:
Line a
上面的代码设法将文件合并在一起并输出得很好,第二行在新换行符上。
但我需要将新合并的行放在一行中。
我尝试删除代码echo.>>"!MrgFiles!\%%a"
但然后它合并两条线没有空间。
如何批量合并线条
line 1 line a
line 2 line b
对不起我的错误解释,我认为代码几乎已经完成,但我无法找到将这些行合并为一行的方法。
请帮助我!
由于
答案 0 :(得分:0)
将文本文件读入变量有一个简单的技巧。
@echo off
setlocal
set /p "text1="<file1.txt
set /p "text2="<file2.txt
>merged.txt echo(%text1% %text2%
这将获取file1.txt和file2.txt的内容,将它们连接在一行,并将连接的行转储到merged.txt。
set /p
命令侦听stdin上的输入。 <
将文件的内容转储到stdin,进入等待的set /p
。有关批处理文件重定向的详细信息,请参阅this page。
编辑:嗯,显然你的线太大了,无法使用该方法。这是令人惊讶的,因为我真的认为批量变量可以处理超过2500个字符。我打算建议set /P "= "<NUL
在没有换行符的情况下回显空格,但set /P
拒绝传递空格(或制表符),除非我添加非空白字符。我尝试使用dbenham's second method将退格字符捕获到变量并将其回显到文本文件,但这也不起作用。
长话短说,我放弃了,决定用榴弹炮拍打这只苍蝇。所以。并不是一个免费的编码服务,但爆炸它,我拒绝被你的问题打败。这是一个混合批处理/ JScript脚本,可以执行您想要的操作。用.bat扩展名保存。
@if (@a==@b) @end /* begin JScript multiline comment
:: batch portion
@echo off
setlocal
set "fd1=\folderpath1\"
set "fd2=\folderpath2\"
set "MrgFiles=\outputfolder\"
pushd "%fd1%"
for %%a in (*) do (
if exist "%fd2%\%%~a" (
cscript /nologo /e:Jscript "%~f0" "%%~a" "%fd2%\%%~a" "%MrgFiles%\%%~a"
)
)
popd
goto :EOF
:: end batch portion / begin JScript hybrid */
var fso = new ActiveXObject('scripting.filesystemobject'),
file1 = fso.OpenTextFile(WSH.Arguments(0), 1),
file2 = fso.OpenTextFile(WSH.Arguments(1), 1),
merge = fso.CreateTextFile(WSH.Arguments(2), true);
merge.Write(file1.ReadLine() + ' ' + file2.ReadLine());
file1.Close();
file2.Close();
merge.Close();