Модераторы: bartram, Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание .bat файла. Нужна помощь. 
:(
    Опции темы
t77
  Дата 6.10.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Доброго времени суток, великие гуру и сисадмины.
Создаю bat файл, который копирует файлы из одного места в другое, создавая резервную копию каждого из них. Вроде скрипт делает, то, что нужно...
Код

for /F "tokens=1,2* delims=;" %%i in (files.txt) do (

    xcopy /Y %%~dpj%%~nxj %%~dpi%%~nxj.bak
    xcopy /Y %%~dpi%%~nxj %%~dpj%%~nxj
)

files.txt - Этот текстовой файл содержит 2-а значения.1-ое это директория source, 2-ая директория dest.
Но вот никак не могу избавиться от надоедливого вопроса:
Код

Does  C:\aaa\bbb\ccc\file.txt specify a file name or directory name on the target 
(F=file, D=directory)?

при каждом копировании. smile 
Смотрел в описании функции командной строки, там говорится:
Код

/Y  Suppresses prompting to confirm you want to overwrite an

Я же прописываю /Y, почему он спрашивает? smile 
Подскажите, пожалуйста, можно ли как нибудь избавится от этого вопроса?
Тобишь, чтобы копировал без вопросов.

PM MAIL   Вверх
Thinker
Дата 6.10.2009, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


иногда всех достаю
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 17.8.2007
Где: г.Москва

Репутация: 6
Всего: 29



Цитата(t77 @  6.10.2009,  13:35 Найти цитируемый пост)
Does  C:\aaa\bbb\ccc\file.txt specify a file name or directory name on the target 
(F=file, D=directory)?

Тебя же спросили файл это или каталог? xcopy /f /Y и все заработает. )))


--------------------
Помню! Скорблю!
Ольчик, я все равно тебя заберу обратно.  smile 
PM MAIL ICQ Skype GTalk   Вверх
01MDM
Дата 6.10.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 10.5.2008
Где: Default City

Репутация: 29
Всего: 29



t77
А какой формат files.txt?
Проще всего добавить к xcopy ключик /i - тогда не должно задавать лишних вопросов и считать место назначение папкой.
Цитата

Я же прописываю /Y

У xcopy нет такого ключа (в XP).

решение 2:
В батнике дописать обратный слеш(ь) к пути куда нужно скопировать. Т.е к destination folder

Добавлено через 1 минуту и 22 секунды
Thinker
Тогда уж:
Код

echo Y | xcopy ...



--------------------
Вопросы в личке останутся без ответов.
PM MAIL   Вверх
Thinker
Дата 6.10.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


иногда всех достаю
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 17.8.2007
Где: г.Москва

Репутация: 6
Всего: 29



Цитата(01MDM @  6.10.2009,  16:12 Найти цитируемый пост)
У xcopy нет такого ключа

Что за ерунда?? Есть!!! " /Y           Подавляет запрос на подтверждение перезаписи  "

Цитата(01MDM @  6.10.2009,  16:12 Найти цитируемый пост)
Тогда уж:

Ключевой момент у него не в /Y, а в /f!!!!!


--------------------
Помню! Скорблю!
Ольчик, я все равно тебя заберу обратно.  smile 
PM MAIL ICQ Skype GTalk   Вверх
t77
  Дата 6.10.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Уважаемый Thinker, я понял, что у меня спросили... Файл или директория! 
Вопрос в том, как сделать так, чтобы по умолчанию выбиралась опция файл, тоесть без вопросов.
То, что вы предлогаете, логично, но не работает! Вот так выглядит мой скрипт после изменения:
Код

for /F "tokens=1,2* delims=;" %%i in (files.txt) do (

    xcopy /f /Y  %%~dpj%%~nxj %%~dpi%%~nxj.bak
    xcopy /f /Y  %%~dpi%%~nxj %%~dpj%%~nxj
)

Что я делаю не так?
PM MAIL   Вверх
01MDM
Дата 6.10.2009, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 10.5.2008
Где: Default City

Репутация: 29
Всего: 29



Thinker
Sorry, действительно есть, но он не относится к вопросу. Здесь же xcopy задает вопрос: "Что это папка, или это файл. Куда копировать?" По этому  я и написал 3 решения:

1. Добавить ключ /i
2. Прописать в конечной папке обратный слешь
3. Запайпить "D" в конвейер xcopy.

Т.е
Код

::1
xcopy /i "file" "destfolder"

::2
xcopy "file" "destfolder\"

::3
echo D | xcopy "file" "destfolder"


Исправлено:
Конечно запайпить "D", вроде не пятница..

 

Это сообщение отредактировал(а) 01MDM - 6.10.2009, 16:00


--------------------
Вопросы в личке останутся без ответов.
PM MAIL   Вверх
t77
Дата 6.10.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Скажите пожалуйста как создавать переменные, дописывать к ним значения и использовать их?
Допустим мне необходимо создать переменную sourceDir, затем использовать...
Пример на JavaSript:
Код

var sourceDir = "C:\Templates\doc";
//Теперь при копировании мне необходимо дописать продолжение вложенной директории...
var x = sourceDir + "styles\behaviors\login.xsl";

Как сделать тоже самое только в бат файле?
PM MAIL   Вверх
t77
  Дата 6.10.2009, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Прошу прощения за столь банальные может даже глупые вопросы...
Разобрался спасибо.
Тоесть использовал совет 01MDM . Все работает!
Спасибо.
PM MAIL   Вверх
01MDM
Дата 6.10.2009, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 10.5.2008
Где: Default City

Репутация: 29
Всего: 29



t77

Все переменные (кроме переменных цикла) создаются командой set:
Код

set "sourcedir=C:\Templates\doc"

Цитата

Теперь при копировании мне необходимо дописать продолжение вложенной директории...

Код

set "sourcedir=%sourcedir%\styles\behaviors\login.xsl"
echo %sourcedir%


В контексте самого батника могут быть другие варианты


--------------------
Вопросы в личке останутся без ответов.
PM MAIL   Вверх
t77
Дата 6.10.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Вы правы именно так я и сделал...
Скажите пожалуйста а как мне избавиться от всех деталей батника.Ну, чтобы не распечатывал все что он делает.Везде пишут, что нужно прописать @ECHO OFF. Пишу, но все равно печатает все что делает.
В чем дело? Как ограничется исключительно своими сообщениями?
Спасибо
PM MAIL   Вверх
01MDM
Дата 6.10.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 10.5.2008
Где: Default City

Репутация: 29
Всего: 29



t77
"@echo off" подавляет вывод консольного мусора. Для того что бы подавить весь вывод, надо перенаправить вывод команды или всего батника на нуль. Например для xcopy:
Код

1>nul xcopy /y test.txt d:\

Или

xcopy /y test.txt d:\ 1>nul

Или

xcopy /y test.txt d:\ >nul

Или сразу несколько команд:

1>nul (
xcopy /y test.txt d:\
echo 1
echo 2



Можно сразу весь выходной поток батника (STDOUT) направить на нулевое устройство или в файл:
Код

C:\> test.cmd 1>file.txt


Почитайте справку (В XP - `hh ntcmds.chm`)





--------------------
Вопросы в личке останутся без ответов.
PM MAIL   Вверх
t77
Дата 6.10.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



01MDMsmile 
Спасибо, будем изучать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Windows"
December
bartram
Akella

Запрещается!

1. Обсуждать взлом и делиться кряками

2. Способствовать созданию и распространению вирусов

  • Для бессмертных бородатых вопросов типа Win vs Nix есть специальный форум Религиозные Войны
  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • ВСЕГДА УКАЗЫВАЙТЕ ВЕРСИЮ ОС

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Windows | Следующая тема »


 




[ Время генерации скрипта: 0.0817 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.