使用Windows批处理脚本从文本文件中删除特定内容

时间:2016-02-15 23:31:54

标签: batch-file

一个非常简单的问题,看看你是否可以帮我一把......

我有多个文件,扩展名.tfm(实际上是一个简单的文本文件)。 每个内部的格式总是这样:

-2.90913045e-003   -6.36480816e-001   -7.71287046e-001    2.09995523e+001
-7.30901280e-004    7.71291457e-001   -6.36481700e-001    5.08653785e+002
 9.99995501e-001   -1.28787360e-003   -2.70899210e-003    1.04250041e+003
 0.00000000e+000    0.00000000e+000    0.00000000e+000    1.00000000e+000
Units: mm
# rotation x: 9.02438607e+001
# rotation y: -5.04696056e+001
# rotation z: 9.02618771e+001
# translation x: 2.09995523e+001
# translation y: 5.08653785e+002
# translation z: 1.04250041e+003

我想做的就是删除轮换,翻译写作和内容,并保留原样:

-2.90913045e-003   -6.36480816e-001   -7.71287046e-001    2.09995523e+001
-7.30901280e-004    7.71291457e-001   -6.36481700e-001    5.08653785e+002
 9.99995501e-001   -1.28787360e-003   -2.70899210e-003    1.04250041e+003
 0.00000000e+000    0.00000000e+000    0.00000000e+000    1.00000000e+000
Units: mm
9.02438607e+001
-5.04696056e+001
9.02618771e+001
2.09995523e+001
5.08653785e+002
1.04250041e+003

最后,将格式更改为" .trm"而且我不必保留原始文件。

帮助?

提前感谢你。

4 个答案:

答案 0 :(得分:1)

fps = video.time / PresentedFrames

您需要更改@ECHO Off SETLOCAL SET "sourcedir=U:\sourcedir" SET "destdir=U:\destdir" FOR /f "delims=" %%r IN ( 'dir /b /a-d "%sourcedir%\*.tfm"' ) DO ( ( FOR /f "usebackqdelims=" %%s IN ("%sourcedir%\%%r") DO ( FOR /f "tokens=1-3*delims=: " %%a IN ("%%s") DO ( IF "%%a"=="#" ( IF "%%b"=="rotation" ECHO(%%d IF "%%b"=="translation" ECHO(%%d ) ELSE ECHO(%%s ) ) )>"%destdir%\%%~nr.trm" ) GOTO :EOF sourcedir的设置以适合您的具体情况。

将符合destdir的文件名目录读入*.tfm

逐行阅读每个文件到%%r

使用 space 作为分隔符,检查%%s代币是否为分隔符。将令牌分配给%% a .. %% d

如果%%s不是%%a,只需重现该行,否则如果第二个令牌是其中一个关键字,则重现#(前3个令牌之后的部分)。

目标文件名是根据目标目录名加上原始文件的名称部分+ %%d

构建的

答案 1 :(得分:0)

我过去曾用过这个: http://fart-it.sourceforge.net/

FART,查找和替换文字,效果很好。

如果您乐意使用第三方软件,可能是您最好的选择。

答案 2 :(得分:0)

除了我建议的FART,我建议使用PowerShell脚本。

在此网站上找到此页面Replace File contents

所以我玩弄了这个:

$content = [System.IO.File]::ReadAllText("test.txt").Replace("# rotation x: ","")
[System.IO.File]::WriteAllText("test.txt", $content)
$content = [System.IO.File]::ReadAllText("test.txt").Replace("# rotation y: ","")
[System.IO.File]::WriteAllText("test.txt", $content)
$content = [System.IO.File]::ReadAllText("test.txt").Replace("# rotation z: ","")
[System.IO.File]::WriteAllText("test.txt", $content)
$content = [System.IO.File]::ReadAllText("test.txt").Replace("# translation x: ","")
[System.IO.File]::WriteAllText("test.txt", $content)
$content = [System.IO.File]::ReadAllText("test.txt").Replace("# translation y: ","")
[System.IO.File]::WriteAllText("test.txt", $content)
$content = [System.IO.File]::ReadAllText("test.txt").Replace("# translation z: ","")
[System.IO.File]::WriteAllText("test.txt", $content)

即可获得所需的结果,现在您需要做的就是在脚本中添加重命名命令。

Rename-Item c:\scripts\test.txt new_name.txt

所以完整的脚本看起来像这样:(清理好以便你可以只改变文件路径变量)

$filepath = "c:\test\test.txt"
$rename = $filepath.Substring(0,$filepath.Length-4) +".trm"
$content = [System.IO.File]::ReadAllText("$filepath").Replace("# rotation x: ","")
[System.IO.File]::WriteAllText("$filepath", $content)
$content = [System.IO.File]::ReadAllText("$filepath").Replace("# rotation y: ","")
[System.IO.File]::WriteAllText("$filepath", $content)
$content = [System.IO.File]::ReadAllText("$filepath").Replace("# rotation z: ","")
[System.IO.File]::WriteAllText("$filepath", $content)
$content = [System.IO.File]::ReadAllText("$filepath").Replace("# translation x: ","")
[System.IO.File]::WriteAllText("$filepath", $content)
$content = [System.IO.File]::ReadAllText("$filepath").Replace("# translation y: ","")
[System.IO.File]::WriteAllText("$filepath", $content)
$content = [System.IO.File]::ReadAllText("$filepath").Replace("# translation z: ","")
[System.IO.File]::WriteAllText("$filepath", $content)
Rename-Item $filepath $rename

答案 3 :(得分:0)

感谢大家的帮助。 最后我确实使用了类似于FART的东西,但它被称为TextCrawler。工作得很好......

再一次感谢。 干杯