Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2020, 12:24   #1
yarxslav
Новичок
Джуниор
 
Регистрация: 17.11.2020
Сообщений: 1
По умолчанию Резервное копирование данных через bat-файл

Доброго времени суток. Требуется помощь с заданием, а именно:
Нужно создать bat файл, который будет делать резервное копирование исходных файлов. Копировать все исходные файлы с расширением .С в каталог, указанный в качестве фактического параметра. Если параметр не задан - создавать в поточной директории директорию bak и копировать все туда. Если каталог с резервной копией уже существует, то спросить у пользователя разрешение на перезапись. Помощь нужна срочно! Заранее спасибо.

У меня есть в каталоге lab папка testcopy, в которой находятся файлы, для которых нужно сделать резервную копию (только для файлов с расширением .с). Также есть папка backup, в которую и должны копироваться файлы. По условию задания, если папка backup не указана в качестве фактического параметра, то в поточном каталоге должна быть создана папка bak для резервной копии, а если какая-то из папок с резервными копиями уже существует, то спросить разрешение на перезапись. Не могу реализовать задание. Набросал только такой код, но он не работает:

Код:
@echo off

set FactVar = C:\Users\Yaroslav\lab5\backup

xcopy "C:\Users\Yaroslav\lab5\testcopy\*.c" "FactVar"

if not exist FactVar goto solution

if exist C:\Users\Yaroslav\lab5\bak goto solution1

:solution
mkdir bak

:solution1
choice /c:ync Yes, No, or Cancel


pause
yarxslav вне форума Ответить с цитированием
Старый 19.11.2020, 00:18   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Должно получиться что-то вроде такого:
Код:
rem Для копирования файлов с расширением .c
rem используем маску файла: *.c
@echo off
chcp 65001 > nul
set path=%1
echo p = %path%
if -%1==-bacup (
   echo Копируем файлы в bacup
   goto :EOF
) else (
   if not exist bak (
       md bak
       echo Копируем файлы в bak
       goto :EOF
   ) else (
       set ans=
       set /p ans="Перезаписать данные?[N,y]: "
   )
)
if /i -%ans%==-n (
   goto :EOF
) else (
   echo Копируем файлы с заменой
)
В коде есть тестовые сообщения. Часть надо удалить, а часть заменить на команду.
Поскольку надо копировать только файлы, то следует использовать команду copy.

PS: 65001 - это кодовая страница для UTF-8
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 19.11.2020, 12:15   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
65001 - это кодовая страница для UTF-8
В Windows 7 что-то не хочет работать:
Код:
@echo off
chcp 65001>nul
echo "Привет, UTF-8"
pause
Изображения
Тип файла: png 1.png (4.3 Кб, 14 просмотров)
Arigato вне форума Ответить с цитированием
Старый 19.11.2020, 13:02   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

У меня 10-ка.
Кроме смены страницы надо выбрать шрифт окна Командной строки.
Должен быть установлен Lucida Console.

После обновления Винды мой Блокнот стал открываться с кодировкой UTF-8.
Хотя и 1251 катило.
Надоело переключать и оставил UTF-8.
К тому-же, как понимаю, это тенденция ...

PS: Только что обратил внимание на то, что ошибка о том, что система не может передать в специфицированный девайс. Это nul драйвер. Но этот драйвер ещё со времён DOS ...
Как-то так, ...

Последний раз редактировалось ViktorR; 19.11.2020 в 13:04.
ViktorR вне форума Ответить с цитированием
Старый 19.11.2020, 18:38   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Кроме смены страницы надо выбрать шрифт окна Командной строки.
Должен быть установлен Lucida Console.
Ну это, как минимум, неудобно для пользователя. Пользователю надо запустить и получить результат, а не заниматься танцами с бубном.

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Это nul драйвер. Но этот драйвер ещё со времён DOS
Не совсем понял, при чем тут nul? Может из-за двухбайтовости юникода?
Arigato вне форума Ответить с цитированием
Старый 19.11.2020, 19:05   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Цитата:
Ну это, как минимум, неудобно для пользователя.
Т.к. установку ПО делает сотрудник IT подразделения, то он и настраивает шрифт.
Это делается один раз.
Цитата:
Не совсем понял, при чем тут nul?
Это относится к сообщению, которое вы показали.
Т.е. попробуйте убрать эти символы >nul
Если ошибка по-прежнему, то проблема с кодировкой в Win7.
Эту строку можно заменить на
Код:
chcp 1251 > nul
но тогда, для сохранения кириллицы, надо скрипт сохранить в ANSII формате.
Текущий формат виден внизу Блокнота.
Всё это танцы с бубнами ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 19.11.2020, 20:05   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Интересно, что если убрать строку смены кодировки, то имеем вот что:

1.png

А интересно здесь сообщение, которое выдает pause. В данном случае оно на русском языке. А после смены кодировки - на английском
Arigato вне форума Ответить с цитированием
Старый 19.11.2020, 20:56   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Выполните команду без параметров в командной строке:
Код:
c:\abc>chcp
Текущая кодовая страница: 866
Код текущей страницы 866 - это DOS.
Вместе с тем, скрипт пишется в блокноте, в кодировке Windows - cp1251.

Года полтора назад я подобные проблемы решал для XP, Win 7, а теперь и для Win 10.
Причём с проблемой в Win 10 столкнулся недавно, после очередного большого обновления.
У меня (Win 10), после замены кодовой страницы на 65001
выдаётся сообщение на английском
Код:
Active code  page: 65001
И команда pause так же ругается на английском.
Эти сообщения я отправляю в nul драйвер.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows 10/Explorer не хочет запускать bat файл через файл ярлыка KBO Windows 8 26.11.2017 21:16
Резервное копирование БД WALL БД в Delphi 0 18.10.2010 17:27
резервное копирование LizaVeta SQL, базы данных 1 10.06.2010 09:29
Резервное копирование базы данных Swatch Microsoft Office Access 5 25.08.2009 22:41
Резервное копирование и восстановление данных в SQL Server 2005 Valkiria SQL, базы данных 1 29.10.2007 10:17