标题: [文本处理] 如何用批处理合并生成新文本?帮忙看看 [打印本页]
作者: idc878787 时间: 2021-12-9 20:49 标题: 如何用批处理合并生成新文本?帮忙看看
文本 1.txt
我
是
中
国
人
哈
哈
文本 2.txt
a
b
c
d
如何用批处理生成新文本3.txt
我|a
是|a
中|a
国|b
人|b
哈|b
哈|c
作者: for_flr 时间: 2022-1-10 10:56
本帖最后由 for_flr 于 2022-1-10 14:17 编辑
- @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- set "s=delims="
- for /f "delims=" %%a in (1.txt) do (
- call :job %%a
- set /a n+=1
- set /a mod=!n!%%3
- if !mod! equ 0 (
- set/a m+=1
- set "s=skip=!m! delims="
- )
- )
- pause
- exit /b
-
- :job
- set join=
- for /f "%s%" %%i in (2.txt) do (
- echo;%1^|%%i
- set join=yes
- goto :eof
- )
- if not "%join%"=="yes" echo;%1
复制代码
作者: for_flr 时间: 2022-1-10 11:27
本帖最后由 for_flr 于 2022-1-10 14:34 编辑
- #&cls&powershell -c "type '%~0'|out-string|iex"&pause>nul
- $txt1=gc 1.txt
- $txt2=gc 2.txt|%{$_;$_;$_}
- for($l=0;$l -le $txt1.count;$l++){write-host $txt1[$l] `| $txt2[$l]}
复制代码
powershell
作者: for_flr 时间: 2022-1-10 12:43
本帖最后由 for_flr 于 2022-1-10 14:51 编辑
这个题目还挺有趣,没啥人注意到吗
假设1.txt内容如下复制代码
2楼代码就会出错,在空行和感叹号位置输出一个“n”,百思不得其解,期待解惑。
感谢went大佬在后面楼层给出了答案,说是setlocal enabledelayedexpansion这一句可能会吃掉文本中的叹号。
作者: went 时间: 2022-1-10 13:25
回复 4# for_flr
是因为setlocal enabledelayedexpansion会吃掉感叹号'!',要视情况使用- @echo off & cd /d "%~dp0"
- set /a "a=3,n=0"
- (
- for /f "usebackq delims=" %%i in ("文本1.txt") do (
- call set /a "n+=1,1/(n%%%%3-1)" 2>nul || set /p "q="
- set /p="%%i|"<nul & call echo %%q%%
- )
- )<"文本2.txt"
- pause&exit
复制代码
作者: for_flr 时间: 2022-1-10 14:54
- @echo off
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in (1.txt) do (
- set /a n+=1
- set _!n!=%%a
- )
- for /f "delims=" %%a in (2.txt) do (
- for /l %%b in (1 1 3) do (
- set /a m+=1
- set #!m!=%%a
- )
- )
- for /l %%a in (1 1 %n%) do (
- if defined #%%a (
- echo;!_%%a!^|!#%%a!
- ) else (
- echo;!_%%a!
- )
- )
- pause
复制代码
五楼太精炼了,只能仰望,再贴一个老实写法。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |