[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何在有延迟变量的情况下用FOR /F输出文本中的英文感叹号?

本帖最后由 drliunt 于 2015-2-16 12:25 编辑

这段代码是把1.txt和2.xt隔行插入new.txt并空一行
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "space=1"
  4. for /f "delims=" %%a in (1.txt) do (
  5. set /a LineA+=1
  6. set "_!LineA!=%%a"
  7. )
  8. (for /f "delims=" %%a in (0.txt) do (
  9. echo,%%a
  10. set /a "m=(LineB+=1)%%space, x+=^!m, y=(x-1)%%LineA+1"
  11. if "!m!" == "0" for %%b in (!y!) do echo,!_%%b! & echo.
  12. ))>new.txt
  13. pause
复制代码
可以实现合并功能,但是英文感叹号后面的内容都丢了
endlocal也不知该在哪加

本帖最后由 CrLf 于 2015-2-18 09:10 编辑
  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.     set a=%%a
  4.     setlocal enabledelayedexpansion
  5.     set /p b=
  6.     echo;!a!
  7.     echo;!b!
  8.     echo;
  9.     endlocal
  10. ))<b.txt >合并.txt
复制代码

TOP

顶楼代码这样写是不考虑特殊字符的
如果一定要兼容“!”字符,试试这样:
  1. @set @n=0;/* & echo off
  2. set "space=3"
  3. cscript -nologo -e:jscript "%~0"<"1.txt" "0.txt" "%space%">"new.txt"
  4. pause & exit/b & rem */
  5. var arr = WScript.StdIn.ReadAll().replace(/\r\n$/, "").split("\r\n");
  6. var spc = WScript.Arguments(1);
  7. var fso = new ActiveXObject("Scripting.FileSystemObject");
  8. var txt = fso.OpenTextfile(WScript.Arguments(0), 1).Readall();
  9. var i = 0;
  10. txt = txt.replace(/\r\n$/, "") + "\r\n";
  11. txt = txt.replace(new RegExp("(.*\\n){" + spc + "}", "g"),
  12.         function(s0) {
  13.                 var j = i % arr.length;
  14.                 s0 += arr[j] + "\r\n";
  15.                 i++;
  16.                 return s0
  17.         }
  18. )
  19. WScript.StdOut.Write(txt)
复制代码

TOP

下面这个是自己写个分割器,比较简单,加个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
最近在做某游戏的汉化才突发奇想做这个,结果初校都快做完了,还是没把这问题解决

TOP

返回列表