![]() |
Чтение строки из файла в переменную
Здравствуйте. Т.к. в написании 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 Заранее спасибо! |
Цитата:
Код:
If Exist Out\Flag.txt ( |
Извините, сразу не мог отвечать - не было связи...
Для пробы я сделал простой батник, его содержимое 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 ? |
Николя, прошу прощения, так работает:
Код:
@Echo off |
Да, спасибо огромное, так работает!
Поясните, если не трудно... А эт добавленная строка не повлияет на выполнение других команд, которые есть у меня в рабочем батнике? Там у меня есть другое копирование, запуск приложения... В принципе, ничего сложного там нет, но в реале проверить не могу. И она должна быть именно в начале файла или же перед строкой выполнения этого копирования? |
Цитата:
Цитата:
|
Спасибо еще раз! Очень помогли. Уважаю специалистов.
|
@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%\Рабочий стол\" по окончанию копирования, подставить другое значение (Путь) и продолжить Иными словами, как определить как системную переменную путь к папке профиля не активного юзера. |
sushnyak, примерно так:
Код:
@Echo Off |
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\" Это только то что есть на сейчас, в будущем список увеличится, как тут быть ? |
sushnyak, в цикл вставляйте (образец я вам показал).
|
Здравствуйте. Пожалуйста помогите решить задачу, пытаюсь уже второй день и ни получается. Есть тексовый документ (1.txt), в нем около 200 строк текста, некоторые строки пустые, в некоторых спецсимволы. Необходимо создать New.txt и перенести в него из 1.txt первые 50 строк. Необходим перенос именно строк, а не просто текста, т.е. точная копия первых 50 строк из 1.txt . Пытался командой more - переносится не содиржимое экрана cmd, а содиржимое буфера, команда +150 не сработает даже если выставить обратный порядок, т.к. общее кол-во строк значение переменное, первые 50 строк всегда первые, новые появляются снизу, знака минус не предусмотрено, fiind и sort тоже никак.
|
Wens, VBS устроит?
Код:
Dim FSO, FIn, FOut, Cnt |
Спасибо за ответ, только эта операция является частью конструкции батника, попробовал встроить ее в батник и создать vbs из него - неполучается. Если особо не затруднит, нельзя ли найти решение через cmd ? В принципе, я командой more +50 создал второй файл txt , в нем нет как раз первых 50 строк, но не получается вывести разницу, пытаюсь заставить Findstr вывести разницу, тоже не получается.
|
Цитата:
Код:
CScript /Nologo имя_скрипта.vbs |
Так в том то и дело что мне очень надо иметь один только батник, можно создание и запуск скрипта в процессе работы батника, но у меня не получается перекинуть из батника в скрипт строку 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 и сразу глюки! Еще раз спасибо за скрипт.
|
Здравствуйте. В написании 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-адресе сначала сравнивалась с предыдущей и только в случае её изменения отправлялась на почту? Заранее спасибо! |
wander84, проще воспользоваться Dynamic DNS
|
Petya V4sechkin , спасибо за столь скорый ответ.
Сейчас посмотрю что такое Dynamic DNS и с чем его кушать)) |
Petya V4sechkin , я нашел инфу: принцип Dynamic DNS довольно прост - на своем динамическом хосте устанавливается dyndns-клиент, который периодически "сливает" адрес своего хоста на свой публичный dyndns-сервис, на котором зарегистрирован ваш домен, а этот сервис каждый раз корректирует настройки DNS-зоны в соответствии с изменившимся адресом хоста. Иными словами, сервис осуществляет их периодическую синхронизацию таким образом, чтобы доменное имя всегда соответствовало "гуляющему" IP-адресу вашего хоста.
Только вот у меня нет хоста... Если всё же возвращаться к нашим BAT-файлам: Как вытащить нужную строку из txt файла и записать в другой txt файл? Возможно ли сделать так, чтобы информация об IP-адресе(ipconfig информация,записанная в txt файле) сначала сравнивалась с предыдущей и только в случае её изменения отправлялась на почту? |
Цитата:
|
wander84, если на интерфейсе публичный адрес (что бывает редко) получить IP можно так:
Код:
@Echo Off |
amel27, спасибо. Попробуем!
|
amel27, TCP/IP интерфейс не один... Только вот как указывать его?
Код:
Настройка протокола IP для Windows amel27, в остальном - код отличный! спасибо! |
wander84, выполнить в командной строке:
Код:
WMIC NICCONFIG Where IPEnabled=True Get Index,IPAddress Код:
@Echo Off |
Понял. Получилось. Использую. amel27, Спасибо!
Теперь такая вот задачка стала передо мной: Создается файл в определенное время. Его имя создается исходя из IP-адреса(полученого выше): Код:
echo %$IPAddress%>>C:\%$IPAddress% Через промежуток времени(скажем 1 час), необходимо проверить какой сейчас IP и сравнить его с тем что создался ранее (C:\92.15.67.21). И если: 1) эти IP одинаковы(равны), то ничего не делать. 2) эти IP неодинаковы(неравны), то выполнить bat-файл Пока ломаю голову как сделать проверку... |
Цитата:
Код:
@Echo Off |
Уважаемые эксперты помогите пожалуйста решить проблему. Есть папка с фаилами, которые надо переслать по е-маилу (отдельный файл посылается отдельным е-маилом) после чего переписать в подпапку, у которой название соответствует дате. Пересылать думал Blatom , пока не могу разобраться как Blatu дать в качестве аргумента имя фаила.
|
Цитата:
|
Проблема такого рода. Есть папка "C:\Recovery" с более чем 20000 .txt файлов. В одном из этих файлов есть строка "Progressive" Нужно создать батник, который при нахождении этой строки, или указывал название файла, содержащего эту строку, или копировал его (Скажем на диск D)
|
Цитата:
Код:
Findstr /L /I /M /C:"Progressive" C:\Recovery\*.txt Цитата:
Код:
@Echo Off |
Цитата:
|
Цитата:
Можно и по другому цикл сформировать, но это в 10 раз медленнее: Код:
@Echo Off |
Добрый день помгите вот с такой задачкой!
Собственно, возможно ли при помощи батинка заменять строки в файлах. aka Ctrl+H в любом блокноте. Сразу же пример. есть на C:\ файл dir.txt следущего содержания: Код:
c:\Docume~1\Admin\Cookies\кукис[1].txt Код:
send c:\Docume~1\Admin\Cookies\кукис[1].txt ну может при помощи js или vbs? |
ntro142343245, результат в C:\dir2.txt
Код:
@Echo Off |
|
Такой вопрос. С помощью
Код:
REG EXPORT HKLM\SYSTEM\ControlSet001\Control\Network\ NetworkList.reg /nt4 Код:
"Name"="Подключение по локальной сети" Код:
Подключение по локальной сети Будет использоваться для отключения/включения сети в Код:
netsh routing ip set interface name="переменная с именем сети" state=disable Подскажите пожалуйста. |
Цитата:
Цитата:
Код:
@Echo Off |
...и тем не менее ;)
Цитата:
Код:
@Echo Off |
Цитата:
Код:
@Echo Off |
Здравствуйте. Нужна помощь по созданию батника или скрипта. Задача очень простая, но к сожалению многое позабывал, а времени не хватает. Найти за 2 часа готовое тоже не удалось. Мне бы хотелось создать батник для редактирования текстовых файлов находящихся в разных папках текущего каталога. Конкретно, есть папка и вней куча папок, в каждой из которых есть *txt . Нужно, чтобы батник заменил в во всех этих *txt некоторые символы на другие, с учетом кодировки, т.е. чтобы шрифт был смешанный (Русско-Английский). Вот нашел на рубоарде такое полурешение:
@echo off chcp 1251 for /f "tokens=*" %%a in ('more^<1.txt') do call :_replace %%a goto eof :_replace set i=%* echo %i% set i=%i:о=R% set i=%i:мама=мать% set i=%i:доча=сын% echo %i%>>new.txt goto eof :eof Проблемы в том, что забыл как направлять батник во все поддиректории (во все имеющиеся папки) и в том, что он создает новый файл, а не редактирует имеющийся, при этом, хоть и не очень важно - убирает пустые строки. Помогите плз с решением. |
Время: 18:26. |
Время: 18:26.
© OSzone.net 2001-