删除文件夹和所有子文件夹中的多个文件中的字符串

时间:2016-11-11 10:54:38

标签: batch-file

我有一个包含大量子文件夹的文件夹,其中包含*.qc个不同名称的文件(ump.qcak.qcm4.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文件中删除它们

2 个答案:

答案 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
)