Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 6

Автор: king_stiven
Дата сообщения: 12.05.2009 05:50
Rush
Ага, как раз оттуда скачал.
anachrom
вывод построчно содержимого файла
for /f "usebackq tokens=*" %%i in ("list") do xcopy "%%i" "куда"
Автор: anachrom
Дата сообщения: 12.05.2009 08:11
king_stiven
Пишет:
Непредвиденное появление: %%i. Я так понимаю мне нужно определить это самое %%i.
Еще вопросик. Для того, что бы копировать в тот коталог, в котором я нахожусь я просто не указываю "куда"?
И еще вопросик. Как скопировать не только содержимое папки, а саму папку с содержимым. Т.е. Например я копирую Папку "Soft" , в которой находятся еще две папки "Install" и "Update". Если учесть, что "Soft" находится в корне диска d:, то получается что я задаю:

Код:
xcopy d:\Soft
Автор: king_stiven
Дата сообщения: 12.05.2009 09:33
anachrom
В шапке есть ответы на многие воппросы. Не ленись походи.

Цитата:
Непредвиденное появление: %%i.

Наверно запускаешь из комстроки а не из батника. В пакетных файлах используется запись %%переменная вместо %переменная.

Цитата:
Для того, что бы копировать в тот коталог, в котором я нахожусь я просто не указываю "куда"?

Поэкспериментируй

Цитата:
Как скопировать не только содержимое папки, а саму папку с содержимым.

xcopy /?
/S Копирует все папки и подпапки, кроме пустых.
/Q Не отображает имена файлов во время копирования.
Автор: Nagual
Дата сообщения: 12.05.2009 09:39
anachrom
почему бы не почитать внимательно xcopy/? ???
если код находится в папке назначения
Код:
if exist d:\Soft xcopy/y/e/v/c/i/h/r/k/g d:\Soft
Автор: anachrom
Дата сообщения: 12.05.2009 10:19

Цитата:
xcopy /?
/S Копирует все папки и подпапки, кроме пустых.

неа. так копируется то что в папке ("Install" и "Update"), а не папка с вложением. Нужно, чтобы скопировалась папка "Soft" с папками внутри нее. Допустим копируем в d:\backup
Если по вашей схеме, то в "BackUp" скопируется "Install" и "Update". А нужно. что бы в "BackUp" находилась "Soft", со всеми вложениями ("Install" и "Update").

Цитата:
/Q Не отображает имена файлов во время копирования.

вместо этого, я вывожу все что копируется в файл лога (в конце xcopy ставлю > backup.log).

Цитата:
if exist d:\Soft

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

Цитата:
если код находится в папке назначения
Код:
if exist d:\Soft xcopy/y/e/v/c/i/h/r/k/g d:\Soft

Я имел в виду применительно:

Цитата:
for /f "usebackq tokens=*" %%i in ("list") do xcopy "%%i" "куда"

Но с этим я уже разобрался
Автор: king_stiven
Дата сообщения: 12.05.2009 10:57
anachrom
xcopy d:\Soft Soft /s /i
Автор: anachrom
Дата сообщения: 12.05.2009 12:29

Цитата:
xcopy d:\Soft Soft /s /i

К сожалению опять нет
короче вот код
В "ListBackUp.txt" содержатся ссылки, что нужно скопировать (за это огромное спасибо king_stiven).
Как видно, создается BackUp двухнедельной давности, причем все что старше 7-ми дней складывается в LastWeek.
Вот попробуте. Скопируется то что находится в указанных папках, а вот сама папка нет.
Автор: yurkesha
Дата сообщения: 12.05.2009 13:08
anachrom
ты не совсем правильно понял уважаемого king_stiven
В его интерпретации кусок твоего копирования будет выглядеть так:
Код: do xcopy "%%~i" /s /h /r /f /c /i "%%~nxi"
Автор: anachrom
Дата сообщения: 12.05.2009 13:20
А что такое "%%~nxi"?
Попробовал. Нет. копирует то что в каталоге "Soft" а нужно сам каталог.
Автор: rosalin
Дата сообщения: 12.05.2009 13:27
Уважаемые гуру помогите изменить код


Код: @echo off

for /f "tokens=2,3 delims=. " %%a in ('dir /a:-D /-c /4') do mkdir %%b\%%a 2>nul
for /f "tokens=2,3,6 delims=. " %%a in ('dir /a:-D /-c /4') do move %%c.msg %%b\%%a 2>nul
for /l %%a in (2000,1,2010) do call :months %%a
goto :EOF

:months
for /l %%b in (1,1,9) do rar m -ep %1.0%%b.rar %1\0%%b\*.*
for /l %%b in (10,1,12) do rar m -ep %1.%%b.rar %1\%%b\*.*
Автор: anachrom
Дата сообщения: 12.05.2009 14:04
Для польшей понятности пример на TotalCommander'e. Стоит позция курсора на папке "Soft", во втором окне папка "BackUp" открыта. Если нажать F5, то в папке "BackUp" окажется папка "Soft" (вот это мне и надо). А у меня получается в папке "BackUp" скопированно только содержимое "Soft", т.е. папки "Install" и "Update".
Вот. Ваши варианты я пробую. Пока не то, что надо. Но все равно ГИГАНТСКОЕ спасибо.
Автор: yurkesha
Дата сообщения: 12.05.2009 14:34
anachrom
"%%~nxi" - это имя и расширение последнего каталога в пути из ListBackUp.txt
То есть фактически будет произведено копирование содержимого этого каталога в каталог с таким же именем который будет создан.
Насколько я понял у тебя d:\Soft содержится в ListBackUp.txt?
Если так то все должно скопироваться с созданием содержащего каталога, если же это не так - тогда приводи типичное содержание ListBackUp.txt.
Автор: king_stiven
Дата сообщения: 12.05.2009 15:03
rosalin
Приведи пример пустых каталогов, есть ли пустые подкаталоги.
anachrom
У меня xcopy d:\Soft Soft /s /i работает.
Автор: rosalin
Дата сообщения: 12.05.2009 15:47
создаються каталоги по годам в них по месяцам + еще сорные после отработки все пустые
Автор: king_stiven
Дата сообщения: 12.05.2009 16:03
rosalin
Вот пример удаления пустых папок на диске D:\

Код: @echo off
FOR /R D:\ %%e IN (.) DO (
set "papka=%%e"
call :qwe
)
goto :EOF
:qwe
for /f "tokens=*" %%d in ('dir "%papka%" /b /s /a:-d') do goto ert
rd /s /q "%papka%"
:ert
Автор: rosalin
Дата сообщения: 12.05.2009 16:09
king_stiven
вроде как этот код заработал


Код: @echo off

for /f "tokens=2,3 delims=. " %%a in ('dir /a:-D /-c /4') do mkdir %%b\%%a 2>nul
for /f "tokens=2,3,6 delims=. " %%a in ('dir /a:-D /-c /4') do move %%c.msg %%b\%%a 2>nul
for /l %%a in (2000,1,2010) do call :months %%a
for /f %%D in ('dir /ad/b/s ^|sort /r') do rd %%D
goto :EOF

:months
for /l %%b in (1,1,9) do rar m -ep %1.0%%b.rar %1\0%%b\*.*
for /l %%b in (10,1,12) do rar m -ep %1.%%b.rar %1\%%b\*.*
Автор: romrub
Дата сообщения: 12.05.2009 21:11
rosalin

Цитата:
Код:
...
for /f %%D in ('dir /ad/b/s ^|sort /r') do rd %%D
...


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

см. лекарство в http://forum.ru-board.com/topic.cgi?forum=5&topic=29819&start=400#lt
Автор: Quosio
Дата сообщения: 12.05.2009 21:18
Здравствуйте!

Никогда раньше с бат файлами не работал, теперь приходится ими пользоватся очень часто. В связи с чем возник вопрос, можно ли запустить бат файл, чтобы в нем при старте был прописан путь "G:\>" и уже введен текст "cl -EHsc .cpp" (текст просто введен но не выполнялся).

Заранее спасибо!
Автор: romrub
Дата сообщения: 12.05.2009 21:31
Quosio

Цитата:
можно ли запустить бат файл, чтобы в нем при старте был прописан путь "G:\>" и уже введен текст "cl -EHsc .cpp" (текст просто введен но не выполнялся)


видимо имелось ввиду, чтобы при работе текущим каталогом он считал G:\ ?
тогда командой
cd G:\

а что значит "введен, но не выполнялся" - в смысле в строке ввода, заготовка для дальнейшего редактирования ?
Автор: anachrom
Дата сообщения: 12.05.2009 21:34
Quosio

Код: @echo off
cd /dG:
echo cl - EHsc .cpp
Автор: yurkesha
Дата сообщения: 12.05.2009 21:56
anachrom
Ну так как насчет стандартного содержимого?
Или все уже работает?
Автор: sivka krd
Дата сообщения: 13.05.2009 05:13
Подскажите, как решить следующую задачу.
Есть компьютер, к нему подключён модем Dlink 2500U с ip-адресом 192.168.1.1. Он регулярно зависает, пинги не ходят, страницы не открываются. Стандартным средством его перезагрузки является http://192.168.1.1/rebootinfo.cgi.
Требуется сделать скрипт, который будет постоянно пинговать определённый адрес (например, dns-сервер) и, в случае пропадания пинга более чем на 5 запросов, загружать cgi-скрипт.

Заранее спасибо за возможные варианты решения.
Автор: Quosio
Дата сообщения: 13.05.2009 08:19
Во-первых спасибо за помощь! Путь к файлу с командой "cd /dG:" работает прекрасно.


Цитата:
а что значит "введен, но не выполнялся" - в смысле в строке ввода, заготовка для дальнейшего редактирования ?


Да, заготовка для дальнейшего редактирования.


Цитата:
Вроде и все


Ммм, получается, что текст просто введен сверху в окошке, можно сделать так, чтобы он был в строке ввода?
Автор: romrub
Дата сообщения: 13.05.2009 08:51
Quosio

Цитата:
Цитата:а что значит "введен, но не выполнялся" - в смысле в строке ввода, заготовка для дальнейшего редактирования ?

Да, заготовка для дальнейшего редактирования.

Цитата:Вроде и все
Ммм, получается, что текст просто введен сверху в окошке, можно сделать так, чтобы он был в строке ввода?


могу ошибаться, но думаю, что средствами bat-файла или cmd.exe этого не сделать.
может найти какой-нибудь клавиатурный автонабиратель по нажатию горячей клавиши ?
в DOS-эпоху таких много было ...
Автор: anachrom
Дата сообщения: 13.05.2009 09:11
yurkesha
У меня там копируется база 1с:
D:\Trade
Помимо этой базы есть папка BackUp, куда сваливается все BackUp'ы:
D:\BackUp
в которой и находится bat'ник.
Все заработало (спаибо yurkesha), просто действительно в ListBackUp.txt была ошибка. Вместо D:\Trade было D:\Trade\*, поэтому и случились косяки.
Строчка копирования у меня сейчас выглядит следующим образом

Код:
for /f "usebackq tones=*" %%i in ("ListBackUp.tx") do xcopy "%%~i" /s /h /r /f /c /i "%%~nxi" > backup.log
Автор: yurkesha
Дата сообщения: 13.05.2009 09:51
anachrom
ну я бы еще исключил копирование списка и ручное создание папки %DATE%:

Код: for /f "usebackq tokens=*" %%i in ("ListBackUp.tx") do xcopy "%%~i" /s /h /r /f /c /i "%DATE%\%%~nxi" > backup.log
Автор: anachrom
Дата сообщения: 13.05.2009 10:10
yurkesha
Вот спасибо за
Цитата:
ну я бы еще исключил копирование списка и ручное создание папки %DATE%

Я над этим тоже думал, но как-то непридумал, начинающий я еще.

Цитата:
перед копированием надоть впихнуть проверку на существование целевого пути - вдруг мы случайно повторно запустили скрипт? И в такой ситуации либо отказываться от копирования либо формировать папку с резервным именем...

Я правильно понял что это то, что предложил Nagual, т.е.:

Код:
if exist d:\Soft xcopy/y/e/v/c/i/h/r/k/g d:\Soft
Автор: yurkesha
Дата сообщения: 13.05.2009 10:25
anachrom
не совсем так:
Код: for /f "usebackq tokens=*" %%i in ("ListBackUp.tx") do if not exist "%DATE%\%%~nxi" xcopy "%%~i" /s /h /r /f /c /i "%DATE%\%%~nxi" > backup.log
Автор: anachrom
Дата сообщения: 13.05.2009 10:52

Цитата:
Так как логично проверить существование конечной папки для сохранения

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

Код: for /f "usebackq tones=*" %%i in ("ListBackUp.tx")
Автор: yurkesha
Дата сообщения: 13.05.2009 11:13
anachrom
да она создается, но!!! - предположим что мы запустили бэкап вторично за день(случайно или расписание сбойнуло или человеческий фактор) - в такой ситуации эта папка уже существует. В принципе можно добиться заведомой уникальности добавив к дате еще и время с точностью до минуты, но как обрезать время в одно действие с заменой символа ":" на что-нибудь допустимое в именах(ну например "_") я на данный момент не соображу, а цепочку присвоений делать как-то некрасиво.

Добавлено:
Что-то протупил:
Код: %TIME:~0,2%_%TIME:~3,2%

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: как сохранить сетевые настройки


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.