Batch file 批处理|复制循环中两行之间的文本
我想将所有零件从Batch file 批处理|复制循环中两行之间的文本,batch-file,Batch File,我想将所有零件从LOAD复制到后续的(分号)和这个在一个循环中。我是新来的批处理,我想知道是否有可能做到这一点与批处理,thx 这是我的txt文件: 我需要从加载到的所有东西 我的想法是: 在文本->保存行号1中搜索第一个LOAD,然后搜索下一个在文本中-保存行号2 然后在目标txt文件中复制块(从行号1到行号2) 删除所有文本,直到第2行 再次启动脚本(循环),并将每个新文本块添加到目标文件中 当到达文本末尾且文本中没有LOAD时结束脚本 它会查找起始行并删除所有到起始行的行 我认为搜索分号
LOAD
复制到后续的代码>(分号)和这个在一个循环中。我是新来的批处理,我想知道是否有可能做到这一点与批处理,thx
这是我的txt文件:
我需要从加载
到的所有东西代码>
我的想法是:
在文本->保存行号1中搜索第一个LOAD
,然后搜索下一个代码>在文本中-保存行号2
然后在目标txt文件中复制块(从行号1到行号2)
删除所有文本,直到第2行
再次启动脚本(循环),并将每个新文本块添加到目标文件中
当到达文本末尾且文本中没有LOAD
时结束脚本
- 它会查找起始行并删除所有到起始行的行
- 我认为搜索分号行应该有效李>
- 但它不会将textblock复制到target.txt文件
- 问题->
sed-n“%startine%”、“%semicolonLine%”>target.txt
- 第一个问题:如何使用行变量来定义要传输到目标文件的textblock?我可以这样使用
sed
命令吗
- 第二个问题:我不知道如何循环批处理脚本?我找到了命令
goto start
。但这似乎不起作用。脚本什么时候结束运行
这不会从行尾修剪任何空格,因为问题中的示例具有尾随空格。通过管道传输到findstr
的echo
可能存在特殊字符问题。我尝试了一个延迟的扩展版本,但仍然可能出现问题
另一种选择:
@echo off
setlocal
set "target=C:\Users\ebeta\Desktop\work3\data.txt"
set "pattern=(?sm)^LOAD .+?;"
powershell -noprofile -command^
"$content = get-content -path '%target%' -raw;"^
"$content = $content -replace '(?m)\s+$','';"^
"$load = select-string '%pattern%' -input $content -allmatches;"^
"if ($load.matches.count -eq 0) {exit 1};"^
"set-content -path '%target%' -value $load.matches -force"
if errorlevel 1 (
>&2 echo No replacements occurred.
exit /b 1
)
此代码使用powershell
修剪尾随空格并获取感兴趣的文本。如果发生替换,则errorlevel
将为0
,否则1
。不知道任何问题。最后的if errorlevel 1
只是为了说明如何检查是否发生了故障。目标
仅在确实发生替换时写入,与先前删除文件的代码不同。如果不需要替换而需要空白文件,请删除powershell
命令的最后第二行:
"if ($load.matches.count -eq 0) {exit 1};"^
是要删除的可选行
这不会从行尾修剪任何空格,因为问题中的示例具有尾随空格。通过管道传输到findstr
的echo
可能存在特殊字符问题。我尝试了一个延迟的扩展版本,但仍然可能出现问题
另一种选择:
@echo off
setlocal
set "target=C:\Users\ebeta\Desktop\work3\data.txt"
set "pattern=(?sm)^LOAD .+?;"
powershell -noprofile -command^
"$content = get-content -path '%target%' -raw;"^
"$content = $content -replace '(?m)\s+$','';"^
"$load = select-string '%pattern%' -input $content -allmatches;"^
"if ($load.matches.count -eq 0) {exit 1};"^
"set-content -path '%target%' -value $load.matches -force"
if errorlevel 1 (
>&2 echo No replacements occurred.
exit /b 1
)
此代码使用powershell
修剪尾随空格并获取感兴趣的文本。如果发生替换,则errorlevel
将为0
,否则1
。不知道任何问题。最后的if errorlevel 1
只是为了说明如何检查是否发生了故障。目标
仅在确实发生替换时写入,与先前删除文件的代码不同。如果不需要替换而需要空白文件,请删除powershell
命令的最后第二行:
"if ($load.matches.count -eq 0) {exit 1};"^
是要删除的可选行。是,这是可能的!如果你写了它,它展示了一个问题,请随时更新你的问题,使之成为主题。你已经发布了一个需求列表。首先自己努力解决这个问题。这里有一些现有的帖子可以解决您试图做的事情的各个部分,比如在文本文件中定位特定文本、从文本文件中删除文本等等。您已经列出了几个任务。选择其中一个,并使用此处现有的问题来完成这项工作。当你的工作完成后,开始下一步的工作。冲洗并重复,直到你的工作。如果您在过程中遇到问题,您可以解释您遇到的问题,以a的形式包含您的代码,然后提问。谢谢您的快速回答。我需要一个可能的save呼叫,因为我在上面搜索了几个小时,但没有找到我的问题。这就是我的意图。我是否必须在新帖子中将我的问题发布到脚本中?感谢如果for
循环或类似过程处理整个文件,则第二个问题已过时goto start
使解释器搜索一行:start
,该行称为标签。我没有使用sed
,所以我在回答中避免了它。考虑一下刷新。是的,这是可能的!如果你写了它,它展示了一个问题,请随时更新你的问题,使之成为主题。你已经发布了一个需求列表。首先自己努力解决这个问题。这里有一些现有的帖子可以解决您试图做的事情的各个部分,比如在文本文件中定位特定文本、从文本文件中删除文本等等。您已经列出了几个任务。选择其中一个,并使用此处现有的问题来完成这项工作。当你的工作完成后,开始下一步的工作。冲洗并重复,直到你的工作。如果您在过程中遇到问题,您可以解释您遇到的问题,以a的形式包含您的代码,然后提问。谢谢您的快速回答。我需要一个可能的save呼叫,因为我在上面搜索了几个小时,但没有找到我的问题。这就是我的意图。我是否必须在新帖子中将我的问题发布到脚本中?感谢如果for
循环或类似过程处理整个文件,则第二个问题已过时goto start
使解释器搜索一行:start
,该行称为标签。我没有使用sed
,所以我在回答中避免了它。考虑刷新。
@echo off
setlocal
set "target=C:\Users\ebeta\Desktop\work3\data.txt"
set "pattern=(?sm)^LOAD .+?;"
powershell -noprofile -command^
"$content = get-content -path '%target%' -raw;"^
"$content = $content -replace '(?m)\s+$','';"^
"$load = select-string '%pattern%' -input $content -allmatches;"^
"if ($load.matches.count -eq 0) {exit 1};"^
"set-content -path '%target%' -value $load.matches -force"
if errorlevel 1 (
>&2 echo No replacements occurred.
exit /b 1
)
"if ($load.matches.count -eq 0) {exit 1};"^