Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Чтение строки из файла в переменную

Ответить
Настройки темы
CMD/BAT - [решено] Чтение строки из файла в переменную

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте. Т.к. в написании bat файлов нет опыта, необходима помощь. В определенном каталоге по условию появляется текстовый файл Flag.txt. В файле есть только одна строка - это путь до каталога картинок, формата bmp. Нужно в имеющийся рабочий bat файл, который выполняет некоторые действия, добавить строки, которые бы проверяли наличие файла Flag.txt, читали бы содержимое строки пути и копировали бы все картинки из каталога картинок в определеный каталог.
В батнике есть уже:
if exist Out\123.xml xcopy Out\123.xml \\User\In\ /y
Эта строка, при наличии файла, копирует его в каталог по сети. И после нужно добавить что-то типа
:сначала, видимо, определить путь, откуда копировать файлы (это строка в файле Flag.txt), и
if exist Out\Flag.txt xcopy <Здесь нужен путь, который определили>\*.bmp \\User\Image\ /y
Заранее спасибо!

Отправлено: 11:15, 29-01-2009

 


Moderator


Сообщения: 53146
Благодарности: 15423

Профиль | Отправить PM | Цитировать


Цитата Николя:
:сначала, видимо, определить путь, откуда копировать файлы (это строка в файле Flag.txt), и
if exist Out\Flag.txt xcopy <Здесь нужен путь, который определили>\*.bmp \\User\Image\ /y
Код: Выделить весь код
If Exist Out\Flag.txt (
  For /F "Delims=" %%I In (Out\Flag.txt) Do Set BmpPath=%%~I
  Xcopy "%BmpPath%\*.bmp" \\User\Image\ /y
)

Отправлено: 11:34, 29-01-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Извините, сразу не мог отвечать - не было связи...
Для пробы я сделал простой батник, его содержимое
Echo off
If Exist Out\Flag.txt (
For /F "Delims=" %%I In (Out\Flag.txt) Do Set BmpPath=%%~I
Xcopy "%BmpPath%\*.bmp" F:\Image\ /y
)
В файле Flag.txt одна строка C:\Image
в этом каталоге есть файлы bmp. На диске F тоже есть каталог Image, куда пробую скопировать файлы.
При запуска батника на экран выводит
Не найден файл: *.bmp
Скопировано файлов: 0
А можно ли как-то посмотреть - что же получает в переменную BmpPath ?

Отправлено: 14:20, 29-01-2009 | #3



Moderator


Сообщения: 53146
Благодарности: 15423

Профиль | Отправить PM | Цитировать


Николя, прошу прощения, так работает:
Код: Выделить весь код
@Echo off
SetLocal EnableExtensions EnableDelayedExpansion

If Exist Out\Flag.txt (
  For /F "Delims=" %%I In (Out\Flag.txt) Do Set BmpPath=%%~I
  Xcopy "!BmpPath!\*.bmp" F:\Image\ /y
)
EnableDelayedExpansion - связывание времени выполнения нужно, чтобы значение переменной BmpPath не терялось.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:28, 29-01-2009 | #4


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Да, спасибо огромное, так работает!
Поясните, если не трудно... А эт добавленная строка не повлияет на выполнение других команд, которые есть у меня в рабочем батнике? Там у меня есть другое копирование, запуск приложения... В принципе, ничего сложного там нет, но в реале проверить не могу.
И она должна быть именно в начале файла или же перед строкой выполнения этого копирования?

Отправлено: 14:42, 29-01-2009 | #5



Moderator


Сообщения: 53146
Благодарности: 15423

Профиль | Отправить PM | Цитировать


Цитата Николя:
А эт добавленная строка не повлияет на выполнение других команд, которые есть у меня в рабочем батнике?
EnableDelayedExpansion может влиять, если в именах файлов и папок есть спецсимволы типа "!" (восклицательного знака).

Цитата Николя:
И она должна быть именно в начале файла или же перед строкой выполнения этого копирования?
Обычно в начале файла, хотя можно и перед циклом.

Отправлено: 15:13, 29-01-2009 | #6


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо еще раз! Очень помогли. Уважаю специалистов.

Отправлено: 15:15, 29-01-2009 | #7


Аватара для sushnyak

Пользователь


Сообщения: 66
Благодарности: 1

Профиль | Отправить PM | Цитировать


@echo on
cd /d %ALLUSERSPROFILE%
cd ..
dir /b >%temp%\users.temp

Получается список учеток:
допустим 3
All Users - (ALLUSERSPROFILE)
Администратор - (USERPROFILE)
Петя
Первые 2 можно опреледить как системные переменные ИНТЕРЕСУЕТ ПУТЬ К ТРЕТЬЕЙ учетке или сколько их там может быть
затем необходимо по очереди подставить путь учетки как переменную в cmd, скажем для
копирования данных из учетки в иное место, вроде этого
XCOPY /S /E /Y "%USERPROFILE%\Рабочий стол" "D:\_Recover\Documents and Settings\%USERNAME%\Рабочий стол\"

по окончанию копирования, подставить другое значение (Путь) и продолжить

Иными словами, как определить как системную переменную путь к папке профиля не активного юзера.

Отправлено: 17:24, 20-03-2009 | #8



Moderator


Сообщения: 53146
Благодарности: 15423

Профиль | Отправить PM | Цитировать


sushnyak, примерно так:
Код: Выделить весь код
@Echo Off
SetLocal EnableExtensions

CD /D "%AllUsersProfile%"
CD ..
For /F "Delims=" %%I In ('Dir /B /AD-S-H ^| FindStr /V /B /I /C:"All Users"') Do (
  MD "D:\_Recover\Documents and Settings\%%I\Рабочий стол"
  XCopy "%%I\Рабочий стол" "D:\_Recover\Documents and Settings\%%I\Рабочий стол" /E /H /Y
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:16, 20-03-2009 | #9


Аватара для sushnyak

Пользователь


Сообщения: 66
Благодарности: 1

Профиль | Отправить PM | Цитировать


Petya V4sechkin,

Хорошо, пользователей находит, каталог создает,
а как быть если заданий на копирование много больше,

перед каждым новой задачей нужно снова подставлять твой скрипт ?


XCOPY /S /E /Y "%USERPROFILE%\Рабочий стол" "D:\_Recover\Documents and Settings\%USERNAME%\Рабочий стол\"
XCOPY /S /E /Y "%USERPROFILE%\Мои документы" "D:\_Recover\Documents and Settings\%USERNAME%\Мои документы\"
XCOPY /S /E /Y "%USERPROFILE%\Избранное" "D:\_Recover\Documents and Settings\%USERNAME%\Избранное\"
XCOPY /S /Y "%USERPROFILE%\Local Settings\Application Data\Microsoft\*.bmp" "D:\_Recover\Documents and Settings\%USERNAME%\Local Settings\Application Data\Microsoft\"
XCOPY /S /Y "%APPDATA%\Adobe" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\Adobe\"
XCOPY /S /Y "%APPDATA%\Canopus\EDIUS" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\Canopus\EDIUS\"
XCOPY /S /Y "%APPDATA%\Canopus\ProCoder 2\User Presets\*.cpf" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\Canopus\ProCoder 2\User Presets\"
XCOPY /S /Y "%APPDATA%\Sony" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\Sony\"
XCOPY /S /Y "%APPDATA%\Opera" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\Opera\"
XCOPY /S /Y "%APPDATA%\Mozilla" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\Mozilla\"
XCOPY /S /Y "%APPDATA%\utorrent" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\utorrent\"
XCOPY /S /Y "%APPDATA%\BSplayer PRO" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\BSplayer PRO\"
XCOPY /S /Y "%APPDATA%\Gracebyte Software" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\Gracebyte Software\"
XCOPY /S /Y "%APPDATA%\VyPRESS" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\VyPRESS\"
XCOPY /S /Y "%APPDATA%\Radmin" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\Radmin\"
XCOPY /S /Y "%APPDATA%\AutoPowerOn" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\AutoPowerOn\"
XCOPY /S /Y "%APPDATA%\Download Master" "D:\_Recover\Documents and Settings\%USERNAME%\Application Data\Download Master\"

Это только то что есть на сейчас, в будущем список увеличится, как тут быть ?

Отправлено: 18:51, 20-03-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Чтение строки из файла в переменную

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] StringRegExpReplace: Конверт. строки атрибутов файла в формат Attrib.exe Creat0R AutoIt 6 14-09-2009 22:52
[решено] Удаление строки из файла gregaz AutoIt 2 16-07-2009 18:46
[решено] Чтение текстового файла с неизвестным именем ZeroCrash AutoIt 4 01-07-2009 19:03
[решено] Чтение-запись битого файла vit777 Видео и аудио: обработка и кодирование 3 19-12-2007 09:45
Shell. Чтение текстового файла по строкам. Delphin911 Общий по Linux 11 07-04-2005 17:58




 
Переход