Batch file 批量插入文本,同时保留数字
我有一个使用Stephans for loop得到结果的代码谢谢,但我仍然有下面解释的问题 原文:Batch file 批量插入文本,同时保留数字,batch-file,Batch File,我有一个使用Stephans for loop得到结果的代码谢谢,但我仍然有下面解释的问题 原文: bbox 7 25 6 04 新案文: first.one 7 second.two 25 third.three 6 fourth.four 04 下面是一段代码,我曾尝试用bbox捕获行,然后错过它们(作为测试),但它总是显示它们如果我能让它工作,我还需要一段代码来返回完整的行(未修改),如果bbox为false @echo off for /f "tokens=1-20" %%a in
bbox 7 25 6 04
新案文:
first.one 7
second.two 25
third.three 6
fourth.four 04
下面是一段代码,我曾尝试用bbox捕获行,然后错过它们(作为测试),但它总是显示它们如果我能让它工作,我还需要一段代码来返回完整的行(未修改),如果bbox为false
@echo off
for /f "tokens=1-20" %%a in (input.txt) do (
echo findstr "bbox" "%%a"
if errorlevel=1 (
echo. >> output.txt
) else (
echo %%a >> output.txt
))
pause
for/f的
循环通常会忽略空行。因此,我们必须确保没有空行(find/n/v”“file.txt
在每行前面加上行号)
其余的都是直截了当的:
@echo off
(
for /f "tokens=1,* delims=[]" %%x in ('find /n /v "" asuka.txt') do (
title woking on line nr %%x
for /f "tokens=1-6,*" %%a in ("@ %%y") do (
if "%%b"=="bbox" (
echo first.one %%c
echo second.two %%d
echo third.three %%e
echo fourth.four %%f
REM lines above: between 'echo' and text, there are a space and a TAB
REM lines above: and a TAB between text and '%%?'
) else echo/%%y
)
))>asuka.new
我最终通过修改你的代码破解了它,谢谢Stephan的帮助。我的项目比bboxes要大一点这里是完整的代码:
@echo off
setlocal enabledelayedexpansion
set tab=
(
for /f "tokens=* delims=[]" %%a in (input.txt) do (
for /f "tokens=1-15" %%b in ("%%a") do (
set attack=false
set atknum=0
if "%%b"=="attack" (
set attack=true
set atknum=1
) else if "%%b"=="attack2" (
set attack=true
set atknum=2
) else if "%%b"=="attack3" (
set attack=true
set atknum=3
) else if "%%b"=="attack4" (
set attack=true
set atknum=4
) else if "%%b"=="attack5" (
set attack=true
set atknum=5
) else if "%%b"=="attack6" (
set attack=true
set atknum=6
) else if "%%b"=="attack7" (
set attack=true
set atknum=7
) else if "%%b"=="attack8" (
set attack=true
set atknum=8
) else if "%%b"=="attack9" (
set attack=true
set atknum=9
)
if "%%b"=="bbox" (
echo %tab% bbox.position.x %%c
echo %tab% bbox.position.y %%d
echo %tab% bbox.size.x %%e
echo %tab% bbox.size.y %%f
) else if "!attack!"=="true" (
if "%%e"=="0" (
echo %tab% attack.damage.type !atknum!
echo %tab% attack.size.x 0
) else (
echo %tab% attack.damage.type !atknum!
echo %tab% attack.position.x %%c
echo %tab% attack.position.y %%d
echo %tab% attack.size.x %%e
echo %tab% attack.size.y %%f
echo %tab% attack.damage.force %%g
echo %tab% attack.reaction.fall.force %%h
echo %tab% attack.block.penetrate %%i
echo %tab% attack.effect.hit.flash.disable %%j
echo %tab% attack.reaction.pause.time %%k
echo %tab% attack.reaction.fall.velocity.y 2
echo %tab% attack.reaction.fall.velocity.x 2
)
) else if "%%b"=="hitflash" (
echo %tab% attack.effect.hit.flash.model %%c
) else if "%%b"=="hitfx" (
echo %tab% attack.effect.hit.flash.sound %%c
) else if "%%b"=="damageonlanding" (
echo %tab% attack.damage.land.force %%c
echo %tab% attack.damage.land.mode %%d
) else if "%%b"=="dropv" (
echo %tab% attack.reaction.fall.velocity.y %%c
echo %tab% attack.reaction.fall.velocity.x %%d
) else if "%%b"=="anim" (
echo.
echo %%a
) else echo %%a
))) >output.txt
您要搜索的模式是什么?你能提供一个被搜索的文件内容的样本吗?而不仅仅是匹配的行。“请求”是错误的。堆栈溢出不是免费的代码编写服务。请显示批处理文件,您需要帮助。它是做什么的,与它应该做的有何不同?从以下命令开始:for/f“tokens=2-5”%a in(“bbox 7 25 6 04”)do@echo%a,%b,%c,%d
(注意,这是命令行语法。如果在批处理文件中使用它,则将每个标记加倍:%a
:%a
等)@malik,我昨天要求提供一个文件内容示例,以确定如何最好地为字符串匹配制定正则表达式模式。如果你能抽出时间,我将不胜感激。同时,在命令提示下尝试输入,FindStr/?
,站起来读一读。谢谢你的帮助,但这段代码只是用原始格式的所有BBox创建了原始文件的精确副本。尝试了一个带有计数器的嵌套for循环,所以复制了同一行,但它不起作用@echo off set line=0(for/f“tokens=1-15”%%b in(input.txt)do(如果“%%b”,则设置line+=1)==“bbox”(echo%%b)else(在(input.txt)do中为/f“令牌=*”%%a设置cline=0(如果“%line%”=%cline%”(echo%%a))>output.txt pausesorry与变量混淆,则设置cline+=1。请尝试编辑过的代码。我真的很想支持拖放,但是每当我在第一个循环输入文件中使用%1、%~1或%*时,我在output.txt中得到的都是我刚刚删除的文件的位置,其他任何人都帮不上忙。