2017-02-13 10 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 

Я искал на 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» внутри них.

+0

Вы должны использовать для переменной в качестве имени файла, Findstr будет разобрать. – Squashman

+0

Как я могу назвать переменную for? % Е? –

ответ

2
  1. Вы размещаете бесполезные кавычки " на нечетных позициях - не делайте этого!
  2. Двойной знак % при использовании for петель в пакетном файле, например for /R %%f.
  3. for /R на самом деле не ищет соответствующие файлы, если нет глобальной wild-карты, такой как * или ?; поэтому лучше использовать 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 
)