标题: [文本处理] 批处理如何在有延迟变量的情况下用FOR /F输出文本中的英文感叹号? [打印本页]
作者: drliunt 时间: 2015-2-16 11:54 标题: 批处理如何在有延迟变量的情况下用FOR /F输出文本中的英文感叹号?
本帖最后由 drliunt 于 2015-2-16 12:25 编辑
这段代码是把1.txt和2.xt隔行插入new.txt并空一行- @echo off
- setlocal enabledelayedexpansion
-
- set "space=1"
-
- for /f "delims=" %%a in (1.txt) do (
- set /a LineA+=1
- set "_!LineA!=%%a"
- )
-
- (for /f "delims=" %%a in (0.txt) do (
- echo,%%a
- set /a "m=(LineB+=1)%%space, x+=^!m, y=(x-1)%%LineA+1"
- if "!m!" == "0" for %%b in (!y!) do echo,!_%%b! & echo.
- ))>new.txt
-
- pause
复制代码
可以实现合并功能,但是英文感叹号后面的内容都丢了
endlocal也不知该在哪加
作者: drliunt 时间: 2015-2-16 11:56
下面这个是自己写个分割器,比较简单,加个ENDLOCAL就解决感叹号问题了。
上面那个是从网上找的,也没太看懂,加不了ENDLOCAL。
@echo off
::setlocal enabledelayedexpansion
set flag=0
for /f "tokens=* delims=" %%i in (test.txt) do (
setlocal enabledelayedexpansion
if !flag!==0 (
endlocal
echo %%i>>splitted\0.txt
set flag=1
call echo %%flag%%
)
if !flag!==1 (
endlocal
echo %%i>>splitted\1.txt
set flag=0
call echo %%flag%%
)
)
pause
最近在做某游戏的汉化才突发奇想做这个,结果初校都快做完了,还是没把这问题解决
作者: apang 时间: 2015-2-17 17:39
顶楼代码这样写是不考虑特殊字符的
如果一定要兼容“!”字符,试试这样:- @set @n=0;/* & echo off
- set "space=3"
- cscript -nologo -e:jscript "%~0"<"1.txt" "0.txt" "%space%">"new.txt"
- pause & exit/b & rem */
-
- var arr = WScript.StdIn.ReadAll().replace(/\r\n$/, "").split("\r\n");
- var spc = WScript.Arguments(1);
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- var txt = fso.OpenTextfile(WScript.Arguments(0), 1).Readall();
- var i = 0;
- txt = txt.replace(/\r\n$/, "") + "\r\n";
- txt = txt.replace(new RegExp("(.*\\n){" + spc + "}", "g"),
- function(s0) {
- var j = i % arr.length;
- s0 += arr[j] + "\r\n";
- i++;
- return s0
- }
- )
- WScript.StdOut.Write(txt)
复制代码
作者: CrLf 时间: 2015-2-18 09:06
本帖最后由 CrLf 于 2015-2-18 09:10 编辑
- @echo off
- (for /f "delims=" %%a in (a.txt) do (
- set a=%%a
- setlocal enabledelayedexpansion
- set /p b=
- echo;!a!
- echo;!b!
- echo;
- endlocal
- ))<b.txt >合并.txt
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |