Пакетный файл для чтения и изменения текстового файла - PullRequest
1 голос
/ 06 февраля 2012

Хорошо, в общем, у меня есть целый список ссылок в текстовом файле Notepad, каждая ссылка в отдельной строке.Все, что я хочу сделать, это добавить немного текста перед каждой ссылкой, а именно: 127.0.0.1 и пару пробелов.

Так что это ...

somelink.com 

становится этим...

127.0.0.1     somelink.com 

К настоящему времени вы, вероятно, уже догадались, что я пытаюсь отредактировать содержимое текстового файла, чтобы сделать его пригодным для использования в качестве файла HOSTS в Windows.

Итак, мне нужен некоторый код пакетного файла, исполняемый в файле .bat, который в основном читает текстовый файл Блокнота, а затем добавляет «127.0.0.1» в начале каждой строки с текстом на нем.Я предполагаю, что это, вероятно, очень простой кусок кода для кого-то, кто немного знает MS DOS и код пакетного файла, но это, безусловно, не я, и единственные пакетные файлы, которые я когда-либо писал, были с помощью, как сейчас.

Спасибо за любую помощь заранее, это действительно очень ценится.

Ответы [ 3 ]

5 голосов
/ 06 февраля 2012

прочитайте HELP FOR, а затем попробуйте это в командной строке

  FOR /F "delims=" %a in (input.txt) do @echo 127.0.0.1   %a >>output.txt

. Здесь приведены некоторые пояснения и некоторые соображения по расширению его с помощью чуть более полной функциональности и помещения его в файл BAT

  1. FOR - это команда для перебора строк вашего входного текстового файла.Прочитайте документацию Microsoft по адресу http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/for.mspx

  2. input.txt - это текстовый файл, содержащий ваш список доменных имен, он должен находиться в текущем каталоге

  3. output.txt будет файлом результатов, который будет содержать список доменных имен с префиксом 127.0.0.1, он будет создан в текущем каталоге

  4. Если вы хотите создать BAT-файл, вам нужно переместить команду FOR и немного отредактировать ее, изменив имена переменных цикла %a на %%a.

  5. Затем вы можете поместить файл BAT либо втекущий каталог, в котором находился ваш ввод и где будет создан вывод.

  6. В качестве альтернативы, вы можете разместить свой BAT-файл в другом месте.В этом случае вам нужно вызвать его с полным путем.

  7. Или вы можете даже поместить его в специальный каталог (у меня есть свой собственный C:\Program Files\CMD) и добавить его вПеременная системы PATHСм. Здесь www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/path.mspx?mfr=true, как вы можете изменить свой PATH для текущего сеанса.И здесь ss64.com/nt/path.html вы можете найти некоторые объяснения того, как сделать изменение PATH постоянным.

  8. Кроме того, у вас может возникнуть желание добавить некоторую гибкость в BATвместо постоянного имени файла input.txt и output.txt замените их на %1 и %2, которые представляют первый и второй параметры командной строки вашего BAT-файла.

  9. пользователь может затем использовать файлы, которые содержат пробелы в именах файлов.Они могут указывать их, окружая имена кавычками ".В этом случае вам нужно добавить некоторое заклинание usebackq в команду FOR, чтобы оно не разрушало хаос, когда пользователь использует кавычки.

  10. Наконец, вам нужно решить, что делатьЕсли выходной текстовый файл уже существует, возможно, вы захотите предотвратить перезапись.

Итак, собрав все эти части вместе, вот короткий BAT-файл, с которого можно начать ...

    @echo off
    if .%2==. goto help
    if not exist %1 goto helpno1
    if exist %2 goto helpalready2
    FOR /F "usebackq delims=" %%a in (%1) do @echo 127.0.0.1   %%a >>%2
    goto :eof
    :help
    echo you need to specify input and output text files
    goto :eof
    :helpno1
    echo %1 not found
    goto :eof
    :helpalready2
    echo %2 already exist
    goto :eof

Добро пожаловать в программирование на BAT и наслаждайтесь!

2 голосов
/ 14 декабря 2012

здесь мы идем!

(
Set /p line1=
Set /p line2=
Set /p line3=
Set /p line4=
)<Filename.txt
echo 127.0.0.1    %line1%>Filename.txt
echo 127.0.0.1    %line2%>>Filename.txt
echo 127.0.0.1    %line3%>>Filename.txt
echo 127.0.0.1    %line4%>>Filename.txt

Это прочитает первые четыре строки текстового файла, а затем вставит ваш материал и каждую строку обратно в строку, из которой он пришел.Веселись!

0 голосов
/ 06 февраля 2012

В дополнение к ответу PA. Если вам требуется определенное количество пробелов, вы можете выбросить их в переменную и добавить в команду.

  SET spaces=          # to the left is 10 spaces
  FOR /F "delims=" %a in (input.txt) do @echo 127.0.0.1%spaces%%a>>output.txt

Таким образом, вывод будетbe

127.0.0.1          somelink.com

Batch-File flavor:

  SET spaces=          # to the left is 10 spaces
  FOR /F "delims=" %%a in (input.txt) do @echo 127.0.0.1%spaces%%%a>>output.txt
...