一个非常简单的问题,看看你是否可以帮我一把......
我有多个文件,扩展名.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"而且我不必保留原始文件。
帮助?
提前感谢你。
答案 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)
答案 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。工作得很好......
再一次感谢。 干杯