搜索目录和子目录中的文件,并编辑这些文件中的特定行

时间:2017-02-13 21:28:22

标签: batch-file search

搜索目录和子目录中的文件,并编辑这些文件中的特定行。

C:\Users\user\Desktop\backup>dir
Volume in drive C has no label.
Volume Serial Number is C8D8-4C1B

Directory of C:\Users\user\Desktop\backup

02/13/2017  03:02 PM    <DIR>          .
02/13/2017  03:02 PM    <DIR>          ..
02/13/2017  02:21 PM    <DIR>          blog
02/13/2017  02:21 PM    <DIR>          css
02/13/2017  02:21 PM    <DIR>          forgot
02/13/2017  02:21 PM    <DIR>          img
02/13/2017  02:21 PM            13,845 index.htm
02/13/2017  02:21 PM    <DIR>          pages
02/13/2017  02:21 PM    <DIR>          photo
02/13/2017  02:21 PM    <DIR>          photos
02/13/2017  02:21 PM    <DIR>          profile
02/13/2017  02:21 PM    <DIR>          signin
02/13/2017  03:11 PM                89 test.bat
02/13/2017  02:21 PM    <DIR>          theme
02/13/2017  02:21 PM    <DIR>          view
2 File(s)         13,934 bytes
13 Dir(s)  74,300,223,488 bytes free

我在stackoverflow上搜索了答案并找到了这段代码:

for /R %f in (index.htm)" do "x"

findstr /v /i "body" index.htm > indexnew.htm

我想出了这段代码而失败了:

"for /R %f in (index.htm)" do "findstr /v /i "shaw" index.htm >     indexnew.htm"

pause

失败了。

我需要使用名称index.htm来操作主目录和子目录中的文件,以删除其中带有“shaw”一词的特定行或行。

1 个答案:

答案 0 :(得分:2)

  1. 您在奇数位置放置了无用的引号" - 请勿这样做!
  2. 在批处理文件中使用%循环时加倍for符号,例如for /R %%f
  3. 当没有像for /R*这样的全球通配符时,
  4. ?实际上并未搜索匹配的文件。所以最好使用for /F "delims=" %%f in ('dir /B /S "index.htm"') do ...
  5. 只需将findstr命令行放入for循环的正文中,然后使用for变量引用%%f作为文件名。
  6. 使用redirection将命令输出写入文件;但是您无法指定该命令已处理的同一文件,因此您需要使用临时文件并将其移动到原始文件之后。
  7. 这一切意味着:

    for /F "delims=" %%f in ('dir /B /S "index.htm"') do (
        findstr /V /I /C:"shaw" "%%~f" > "%%~f.tmp"
        move /Y "%%~f.tmp" "%%~f" > nul
    )