2017-02-13 69 views
0

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

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 

我搜索计算器上的答案,发现这个代码:

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的删除特定的行或与在其中单词“肖”。

+0

您需要使用变量作为FINDSTR将解析的文件名。 – Squashman

+0

我将如何调用for变量? %F? –

回答

2
  1. 要放置无用引号"在奇数位置 - 不这样做!
  2. 双击一个批处理文件中使用for循环时,像for /R %%f%迹象。
  3. for /R实际上并不搜索时没有全局通配符像*?匹配的文件;所以最好使用for /F "delims=" %%f in ('dir /B /S "index.htm"') do ...
  4. 只需将findstr命令行放入for循环的主体中,并使用for变量引用%%f作为文件名。
  5. 使用redirection写命令的输出到一个文件;但是你不能指定已经被命令处理过的同一个文件,所以你需要使用一个临时文件,然后把它移到原来的文件上。

这一切都意味着:

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 
) 
相关问题