Показать полную графическую версию : [решено] Чтение строки из файла в переменную
Здравствуйте. Т.к. в написании 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
Заранее спасибо!
Petya V4sechkin
29-01-2009, 11:34
:сначала, видимо, определить путь, откуда копировать файлы (это строка в файле 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
)
Извините, сразу не мог отвечать - не было связи...
Для пробы я сделал простой батник, его содержимое
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 ?
Petya V4sechkin
29-01-2009, 14:28
Николя, прошу прощения, так работает:
@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 не терялось.
Да, спасибо огромное, так работает!
Поясните, если не трудно... А эт добавленная строка не повлияет на выполнение других команд, которые есть у меня в рабочем батнике? Там у меня есть другое копирование, запуск приложения... В принципе, ничего сложного там нет, но в реале проверить не могу.
И она должна быть именно в начале файла или же перед строкой выполнения этого копирования?
Petya V4sechkin
29-01-2009, 15:13
А эт добавленная строка не повлияет на выполнение других команд, которые есть у меня в рабочем батнике?
EnableDelayedExpansion может влиять, если в именах файлов и папок есть спецсимволы типа "!" (восклицательного знака).
И она должна быть именно в начале файла или же перед строкой выполнения этого копирования?
Обычно в начале файла, хотя можно и перед циклом.
Спасибо еще раз! Очень помогли. Уважаю специалистов.
sushnyak
20-03-2009, 17:24
@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%\Рабочий стол\"
по окончанию копирования, подставить другое значение (Путь) и продолжить
Иными словами, как определить как системную переменную путь к папке профиля не активного юзера.
Petya V4sechkin
20-03-2009, 18:16
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
)
sushnyak
20-03-2009, 18:51
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\"
Это только то что есть на сейчас, в будущем список увеличится, как тут быть ?
Petya V4sechkin
20-03-2009, 18:54
sushnyak, в цикл вставляйте (образец я вам показал).
Здравствуйте. Пожалуйста помогите решить задачу, пытаюсь уже второй день и ни получается. Есть тексовый документ (1.txt), в нем около 200 строк текста, некоторые строки пустые, в некоторых спецсимволы. Необходимо создать New.txt и перенести в него из 1.txt первые 50 строк. Необходим перенос именно строк, а не просто текста, т.е. точная копия первых 50 строк из 1.txt . Пытался командой more - переносится не содиржимое экрана cmd, а содиржимое буфера, команда +150 не сработает даже если выставить обратный порядок, т.к. общее кол-во строк значение переменное, первые 50 строк всегда первые, новые появляются снизу, знака минус не предусмотрено, fiind и sort тоже никак.
Petya V4sechkin
03-04-2009, 18:33
Wens, VBS устроит?
Dim FSO, FIn, FOut, Cnt
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FIn = FSO.OpenTextFile("1.txt", 1)
Set FOut = FSO.CreateTextFile("New.txt", True)
Cnt = 0
Do While Not FIn.AtEndOfStream And Cnt < 50
FOut.WriteLine FIn.ReadLine
Cnt = Cnt + 1
Loop
FOut.Close
FIn.Close
Спасибо за ответ, только эта операция является частью конструкции батника, попробовал встроить ее в батник и создать vbs из него - неполучается. Если особо не затруднит, нельзя ли найти решение через cmd ? В принципе, я командой more +50 создал второй файл txt , в нем нет как раз первых 50 строк, но не получается вывести разницу, пытаюсь заставить Findstr вывести разницу, тоже не получается.
Petya V4sechkin
03-04-2009, 20:14
только эта операция является частью конструкции батника, попробовал встроить ее в батник и создать vbs из него - неполучается.
Делаете скрипт .vbs, запускаете из батника командой:
CScript /Nologo имя_скрипта.vbs
Так в том то и дело что мне очень надо иметь один только батник, можно создание и запуск скрипта в процессе работы батника, но у меня не получается перекинуть из батника в скрипт строку Do While Not FIn.AtEndOfStream And Cnt < 50 , все остальные строки долетают как надо, а эта либо не долетает вообще, либо с кавычками, либо приходят кракозяблы, между строками пустых строк как у вас нет, но если вставить недостающую, то работает. Вот ищу решение а иначи уже почти готовый батник придется переделывать в скрипт.
Petya V4sechkin
03-04-2009, 22:10
не получается перекинуть из батника в скрипт строку Do While Not FIn.AtEndOfStream And Cnt < 50
Echo Do While Not FIn.AtEndOfStream And Cnt ^< 50 >>имя_скрипта.vbs
Символ ^ для экранирования спецсимволов.
Ну как обидно! Уже почти додумался сам, экперементировал с символами % и ^ перед <50. Большущее вам спасибо! Кстати летом пользовался вашим интегратором v.8.8.19 .На дистриб SP2купленный когда то в ларьке, был интегрирован SP3, аддоны WMP11 и IE7 - результат обалденный, система очень, очень стабильна, а вот недавно попытался зделать тоже на оригинальный CD SP2 OEM интегратором v.8.12.12 и сразу глюки! Еще раз спасибо за скрипт.
wander84
22-04-2009, 13:07
Здравствуйте. В написании bat файлов у меня мало опыта, необходима помощь.
Ситуация такая:
Есть комп дома и комп на работе. Дома IP динамический. Хочу заходить на домашний комп через "Подключение к удаленному рабочему столу" и др. - нужна информация об изменении IP домашнего компа.
Задумка такая:
В планировщике заданий(назначенные задания) каждый час указываю выполнять BAT-файл с содержанием:
ipconfig > C:\body.txt
C:\blat.exe C:\body.txt -to почта_куда@слать.ru -subject "IP-adress" -charset windows-1251
т.е. информация ipconfig пишется в body.txt и с помощью утилиты blat передается почтой на ящик "почта_куда@слать.ru".
Но в ipconfig много строк, нужна всего одна - IP - xxx.xxx.xxx.xxx (внешний IP)
Как вытащить нужную строку из txt файла? Чтобы её записать, к примеру в другой txt файл, и его передать на почту. Желательно, чтобы IP был в теме сообщения.
Возможно ли сделать так, чтобы информация об IP-адресе сначала сравнивалась с предыдущей и только в случае её изменения отправлялась на почту?
Заранее спасибо!
Petya V4sechkin
22-04-2009, 13:11
wander84, проще воспользоваться Dynamic DNS (http://www.dyndns.com/services/dns/dyndns/)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.