1

Программа ищет файлы, содержащие определенные ключевые слова, и частью ее задачи является отображение искомых ключевых слов. Ключевые слова пишутся одно под другим в текстовом файле, из которого они читают. Тем не менее, он читает только с последней строки? Вероятно, очень простая ошибка, но я ее упускаю ...

@echo off
:main_section
set main_dir=%cd%
set key1=variable    
set key2=variable
set key3=variable
set key4=variable
set key5=variable
for /f "delims=" %%a in (keylist.txt) do set "key1=%%a"
for /f "skip=1 delims=" %%b in (keylist.txt) do set "key2=%%b"
for /f "skip=2 delims=" %%c in (keylist.txt) do set "key3=%%c"
for /f "skip=3 delims=" %%d in (keylist.txt) do set "key4=%%d"
for /f "skip=4 delims=" %%e in (keylist.txt) do set "key5=%%e"
echo warning: do not launch from the userprofile directory
echo warning: write exactly five keywords in keylist.txt
echo searching for %key1%, %key2%, %key3%, %key4%, %key5%
pushd collection 
>>%key1%.txt findstr /i /p /s %key1% %userprofile%\*.* >nul
echo search for %key1% complete - printed to collection\%key1%.txt
>>%key2%.txt findstr /i /p /s %key2% %userprofile%\*.* >nul
echo search for %key2% complete - printed to collection\%key2%.txt
>>%key3%.txt findstr /i /p /s %key3% %userprofile%\*.* >nul
echo search for %key3% complete - printed to collection\%key3%.txt
>>%key4%.txt findstr /i /p /s %key4% %userprofile%\*.* >nul
echo search for %key4% complete - printed to collection\%key4%.txt
>>%key5%.txt findstr /i /p /s %key5% %userprofile%\*.* >nul
echo search for %key5% complete - printed to collection\%key5%.txt
pushd %main_dir% 
for /f "tokens=3" %%f in ('dir "collection"^|find "File(s)"') do set size=%%f
set "size=%size:,=%"
echo %size% bytes of information collected
echo press any key to exit the program
pause >nul

1 ответ1

1

Вероятно, очень простая ошибка, но я ее упускаю ...

Ваши циклы for обрабатывают все строки в файле, поэтому сохраняется только последнее значение в файле.

Вы можете упростить ваш пакетный файл и использовать один цикл for вместе с отложенным расширением и счетчиком.

Вот небольшой пакетный файл, который дает вам основное решение. Объедините это с вашим командным файлом.

test.cmd:

@echo off 
setlocal enabledelayedexpansion
set /a _index=1
for /f "delims=" %%a in (keylist.txt) do (
  set "key!_index!=%%a"
  set /a _index+=1
  )
echo searching for !key1!, !key2!, !key3!, !key4!, !key5!
endlocal  

Пример вывода:

> type keylist.txt
1
2
3
4
5
> test
searching for 1, 2, 3, 4, 5

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа.
  • for - Условно выполнить команду несколько раз.
  • set - отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .