Чтение данных из файла .txt в файл BATCH - PullRequest
0 голосов
/ 09 января 2019

Я пытался создать программу (.bat, которую я затем преобразую в .exe), которая копирует и запускает установщики программного обеспечения, чтобы установить конкретную программу на тонну компьютеров, но я также знаю, как это сделать. работать с любым файлом и создавать файл .txt, чтобы сообщить файлу .bat, как выполнить команду xcopy ...

Итак ... Мне нужна помощь с чтением из .txt файлов в BATCH-файле

Это часть моего кода без запуска и удаления:

@echo off

echo Running...

for /f "Delims=1" %%a in (settings.txt) do (
set settings1=%%a
)
set file_org=%settings1%

for /f "Delims=2" %%b in (settings.txt) do (
set settings2=%%b
)
set file_dest=%settings2%

echo Copying %file_org% to %file_dest% ...
xcopy /y %file_org% %file_dest% >nul
echo Copied %file_org% to %file_dest% succesfuly!
pause

И вот как должен быть .txt файл, когда правильный:

F:\test
C:\Users\%username%\Desktop

Первая строка - это источник файла, который он будет копировать Вторая строка - это место назначения, куда будет скопирован файл

Да, это нужно запускать на USB-накопителе, на самом деле, как я уже говорил ранее, это передача, запуск, удаление программы установки с USB-накопителя, чтобы ускорить массовую установку программного обеспечения.

Позвольте мне рассказать вам, как все это работает:

  1. Настройка файла settings.txt
  2. Подключите флешку к ПК с нужной программой и моим маленьким .bat файлом
  3. Запустите его!
  4. Продолжить процесс установки с помощью программы
  5. Мое программное обеспечение удаляет Intaller
  6. Извлеките флешку из ПК (в целях безопасности не забудьте извлечь USB;))
  7. Повторите этот очень короткий процесс на другом компьютере

Все это экономит время, потому что вам не нужно каждый раз обращаться к установщику, просто настройте все один раз и продолжайте установку ...:)

Также мне нравится делать вещи красивыми, так что ... не дайте мне что-нибудь запутать, пожалуйста ...:)

Спасибо и заранее, Любовь из Франции, ILTP -_-

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Я бы попытался выполнить задачу чтения первой и второй строк файла в переменные следующим образом:

@Echo Off
Echo Running ...
(Set /P "file_org="
    Set /P "file_dest=")<"settings.txt"
Echo Copying %file_org% to %file_dest% ...
XCopy "%file_org%" "%file_dest%" /Y >Nul 2>&1 && (
    Echo Copied %file_org% to %file_dest% succesfully!)
Pause

Надеюсь, это поможет вам.

0 голосов
/ 09 января 2019

Основная проблема, с которой вы столкнулись в своем коде - это неправильное использование Delims=. Таким образом, это скажет for loop, что нужно выполнить цикл как часть разделения между токенами. Примером этого будет взять Hello1My1Name1Is1John ... Delims=1 Удалит 1 и позволит вам разделить их на основе tokens=1,2,3,4,5, поэтому %%A = Hello, %%B = My, отл.

На самом деле вам в этом поможет оператор skip=. Это ограничит результаты, пропуская количество первых результатов x . Так ..

for /f "Tokens=*" %%a in (settings.txt) do (
    set file_org=%%a
)

for /f "Tokens=* Skip=1" %%a in (settings.txt) do (
    set file_dest=%%a
)

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

Для этого мы можем использовать формат file_org=F:\test. Чтобы вызвать их в цикле, будет использоваться очень простой цикл for с tokens=1,2* delims==. Имейте в виду, что специально для расположения папок / файлов вы цитируете свои set утверждения. Пример, set "file_dest=%settings2%". Кроме того, не бойтесь устанавливать свою основную строку внутри цикла. Я понимаю, почему вы сделали это так, как хотели получить последний результат, но при правильной настройке цикла вам не нужно это делать!

Copy.Bat:

@ECHO OFF

Rem | Set strings based of whats in config
for /F "tokens=1,2* delims==" %%A in (Settings.ini) do (
    Set "%%A=%%B"
)

echo Copying %file_org% to %file_dest% ...
xcopy /y %file_org% %file_dest% >nul
echo Copied %file_org% to %file_dest% succesfuly!

pause

Settings.ini: (с именем .ini для собственных предпочтений. .txt тоже будет работать)

file_org=F:\test
file_dest=C:\Users\%username%\Desktop

Для получения справки по любой из команд выполните следующее:

  • call /?
  • set /?
  • for /?
  • if /?
  • find /?
  • И так далее.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...