我有一个包含大量子文件夹的文件夹,其中包含*.qc
个不同名称的文件(ump.qc
,ak.qc
,m4.qc
等等。)。现在,我需要从以.qc
开头的所有$hbox
文件中删除某些完整字符串。例如
当前版本
// 2 attachment(s)
$attachment 0 "Weapon" 0.000000 -38.600000 1.000000
$attachment 1 "Weapon" 0.000000 1.000000 2.000000
// 46 hit box(es)
$hbox 0 "L UpperArm" -20.781071 -5.960000 -7.010000 2.890000 6.380000 3.900000
$hbox 0 "L Forearm" -17.050846 0.000000 -3.820000 1.040000 3.630000 2.280000
$hbox 0 "L Hand" -7.200000 -1.960000 -3.630000 0.150000 2.380000 2.870000
$sequence "idle1" "idle1" fps 1
$sequence "idle2" "idle2" fps 1
$sequence "idle3" "idle3" fps 1
需要的版本
// 2 attachment(s)
$attachment 0 "Weapon" 0.000000 -38.600000 1.000000
$attachment 1 "Weapon" 0.000000 1.000000 2.000000
// 46 hit box(es)
$sequence "idle1" "idle1" fps 1
$sequence "idle2" "idle2" fps 1
$sequence "idle3" "idle3" fps 1
正如您所看到的,字符串以相同的方式开始,但它们不一样,我需要使用命令从所有这些.qc
文件中删除它们
答案 0 :(得分:1)
使用findstr /V
排除包含匹配项的所有行(对于区分大小写的搜索,请移除/I
):
@echo off
for /R "." %%F in ("*.qc") do (
> "%%~F.tmp" findstr /V /I "^$hbox\>" "%%~F"
> nul move /Y "%%~F.tmp" "%%~F"
)
这将列出给定目录中的所有*.qc
个文件(此处为当前文件.
),并且对于每个找到的文件,将所有不以单词$hbox
开头的行复制到临时文件,然后将其移动到原始文件上(因此覆盖;因此将rem
放在move
命令行的前面以进行测试。
答案 1 :(得分:0)
这个批处理文件应该这样做。它遍历所有子文件夹并修改所有 .QC 文件。 非常在测试时要小心,因为它会重写原始的QC文件。
@ECHO OFF
Setlocal EnableDelayedExpansion
for /r . %%a in (*.qc) do (
set fname=%%a
for /f "delims=" %%b in (!fname!) do (
set oneline=%%b
set keyword=!oneline:~0,5!
if NOT !keyword!==$hbox echo %%b
) >> !fname!.qc2
del !fname!
move !fname!.qc2 !fname!>nul
)