Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
bodyany4
2 / 2 / 0
Регистрация: 26.09.2011
Сообщений: 12
1

Из каталога, имя которого указано в качестве формального параметра, копировать все файлы с расширением .C

20.12.2011, 22:38. Просмотров 2121. Ответов 11
Метки нет (Все метки)

Имеется задание:

Создавать резервную копию исходных файлов. Копировать все исходные файлы с
расширением .С в каталог указанном в качестве фактического параметра. Если
параметр не задан - создавать в текущей директории директорию bak и
копировать всё туда. Если каталог с резервной копией уже существует -
спросить у пользователя разрешение перезаписать

Собственно вот решение (ОНО НЕ РАБОТАЕТ ДО КОНЦА. Не спрашивает пользователя о перезаписи bak. БУДУ БЛАГОДАРЕН ЗА ДОРАБОТКУ):
Windows Batch file
1
2
3
4
5
6
@echo off
setlocal ENABLEDELAYEDEXPANSION
 if "%1"=="" (md "bak"&set f=bak) else (set f=%~1)
 if exist %1 (set /p y=""&if /i "!y!"=="n" exit)
 for /f "tokens=*" %%i in ('dir /a:-d /b "*.C"') do (copy /y "%%i" "%f%\%%i")
 exit
Теперь нужно выполнить следующее:

Восстанавливать исходные файлы из резервной копии.
Из каталога, имя которого указано в качестве формального параметра,
копировать все файлы с расширение .С в текущий каталог. Если параметр неуказан
то копировать файлы из директории bak в текущем каталоге. Если директории
несуществует - выдавать ошибку, выводить помошь а завершить работу.

Помогите с выполнением задачки. Заранее спасибо за помощь.

Добавлено через 34 минуты
Правильное решение первой задачи:

Windows Batch file
1
2
3
4
5
6
7
8
@echo off
setlocal ENABLEDELAYEDEXPANSION
 if "%1"=="" (md "bak"&set f=bak) else (set f=%~1)
 @echo y - rewrite
 @echo n - exit
 @set /p a="Enter your choice: "
 @if "%a%" == "y" for /f "tokens=*" %%i in ('dir /a:-d /b "*.C"') do (copy /y "%%i" "%f%\%%i")
 pause
прошу помощи со вторым.
ап.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2011, 22:38
Ответы с готовыми решениями:

Копировать все исходные файлы с расширением .C в каталог, указанный в качестве фактического параметра
Создавать резервную копию исходных файлов. Копировать все исходные файлы с расширением .С в...

Копировать из текущего каталога все файлы с расширением .txt, кроме одного файла
Написать пакетный файл, который будет копировать из текущего каталога все файлы с расширением .txt,...

Копировать из текущего каталога в указанный каталог все файлы с расширением .txt кроме одного указанного
Написать командный файл, который будет копировать из текущего каталога все файлы с расширением тхт,...

Написать пакетный файл, который будет копировать из текущего каталога все файлы с расширением .DRV в заданные
Написать пакетный файл, который будет копировать из текущего каталога все файлы с расширением .DRV...

Копировать из текущего каталога все файлы с расширением .txt, кроме одного заданного файла, в заданный каталог
Доброго времени суток, помогите, пожалуйста с решением задачки) Написать командный файл, который...

11
Ris
792 / 174 / 9
Регистрация: 11.01.2011
Сообщений: 543
20.12.2011, 22:41 2
Не спрашивает пользователя о перезаписи bak
Соответственно поменять 3 строку в моем коде на:
Windows Batch file
1
if "%1"=="" (if exist bak (set /p y="perezapusat' bak?(y,n): "&if "!y!"=="n" (exit) else (md bak))) else (set f=%~1)
0
bodyany4
2 / 2 / 0
Регистрация: 26.09.2011
Сообщений: 12
20.12.2011, 22:44  [ТС] 3
Цитата Сообщение от bodyany4 Посмотреть сообщение
Не спрашивает пользователя о перезаписи bak
эту проблему я решил извращённо ещё и таким вот образом:

Цитата Сообщение от bodyany4 Посмотреть сообщение
Bash
1
2
3
4
@echo y - rewrite
*@echo n - exit
*@set /p a="Enter your choice: "
*@if "%a%" == "y" for /f "tokens=*" %%i in ('dir /a:-d /b "*.C"') do (copy /y "%%i" "%f%\%%i")
1
Ris
792 / 174 / 9
Регистрация: 11.01.2011
Сообщений: 543
20.12.2011, 22:45 4
Восстанавливать исходные файлы из резервной копии.
Из каталога, имя которого указано в качестве формального параметра,
копировать все файлы с расширение .С в текущий каталог. Если параметр неуказан
то копировать файлы из директории bak в текущем каталоге. Если директории
несуществует - выдавать ошибку, выводить помошь а завершить работу.
Почти тоже самое только наоборот.
0
20.12.2011, 22:45
bodyany4
2 / 2 / 0
Регистрация: 26.09.2011
Сообщений: 12
20.12.2011, 22:46  [ТС] 5
Не могли бы вы помочь с решением этой "наоборотной" задачи?
0
Ris
792 / 174 / 9
Регистрация: 11.01.2011
Сообщений: 543
20.12.2011, 22:46 6
А что за звездочки *?
*@echo n - exit
Да и что за @? Раз мы написали в начале @echo off, то никакие @ дальше не нужны
@echo y - rewrite
@echo n - exit
@set /p a="Enter your choice: "
@if "%a%" == "y" for /f "tokens=*" %%i in ('dir /a:-d /b "*.C"') do (copy /y "%%i" "%f%\%%i")
0
bodyany4
2 / 2 / 0
Регистрация: 26.09.2011
Сообщений: 12
20.12.2011, 23:02  [ТС] 7
Мои глубокие познания в .bat'ах заканчиваются чтением методички, которую неумело создали в качестве пособия. Звёздочки - косяк мой, не правильно тэг поставил.
Усвою ваш совет

Добавлено через 9 минут
в каталог указанном в качестве фактического параметра
а как фактический параметр задать?
и будет ли он работать в подобном коде?

Добавлено через 3 минуты
Нашёл особенность.
Если в папке с бат-файлом нету папки 'bak' мы копируем наши *.c файлы в корень c:\

Windows Batch file
1
2
3
4
5
@echo off
setlocal ENABLEDELAYEDEXPANSION
 if "%1"=="" (if exist bak (set /p y="perezapusat' bak?(y,n): "&if "!y!"=="n" (exit) else (md bak))) else (set f=%~1)
 for /f "tokens=*" %%i in ('dir /a:-d /b "*.C"') do (copy /y "%%i" "%f%\%%i")
 pause
0
Ris
792 / 174 / 9
Регистрация: 11.01.2011
Сообщений: 543
20.12.2011, 23:09 8
Прочти писал одному челу про Параметры Разработать программу для копирования заданного файла в домашние каталоги пользователей ПК
Код напишу через в течении 15 минут.
0
bodyany4
2 / 2 / 0
Регистрация: 26.09.2011
Сообщений: 12
20.12.2011, 23:11  [ТС] 9
Благодарю за всю оказанную помощь!
И заранее за код.
0
Ris
792 / 174 / 9
Регистрация: 11.01.2011
Сообщений: 543
20.12.2011, 23:42 10
блин задержался
Windows Batch file
1
2
3
4
5
@echo off
if "%1"=="" (set f=bak) else (set f=%~1)
if not exist "%f%" (Echo Error.&pause&exit)
copy /y "%f%\*.C" "*.C"
pause
Windows Batch file
1
2
3
4
5
6
7
@echo off
setlocal ENABLEDELAYEDEXPANSION
if "%1"=="" (set f=bak) else (set f=%~1)
if not exist "%f%" (Echo Error.&pause&exit)
for /f "tokens=*" %%i in ('dir /a:-d /b "%f%\*.C"') do (copy /y "%%i" "%cd%\%%~nxi")
copy /y "%f%\*.C" "*.C"
pause
1
bodyany4
2 / 2 / 0
Регистрация: 26.09.2011
Сообщений: 12
20.12.2011, 23:55  [ТС] 11
Огромнейшее спасибо.

И последнее. Здеся:
Windows Batch file
1
2
3
4
5
6
@echo off
setlocal ENABLEDELAYEDEXPANSION
 set /p f="vvedite disk, na kotoriy nujno skopirovat' faily:"
 if "%1"=="" (if exist bak (set /p y="perezapusat' bak?(y,n):" &if "!y!"=="n" (exit) else (md bak))) else (set f=%~1)
 for /f "tokens=*" %%i in ('dir /a:-d /b "*.C"') do (copy /y "%%i" "%f%\%%i")
 pause
могу в параметр f записать имя нужного мне диска. но не пути.
можно ли записывать путь в подобный параметр? или это фантастика? ^^
1
Ris
792 / 174 / 9
Регистрация: 11.01.2011
Сообщений: 543
21.12.2011, 00:35 12
f - это не параметр? это переменная, параметр это - %1, %2, и т. д..

Точнее надо извлечь из параметра только имя диска, а не весь путь к каталогу? тогда используй
Bash
1
set f=%~d1
0
21.12.2011, 00:35
StackOverflow
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2011, 00:35

Копировать все файлы с заменой из каталога c текущей датой и его подкаталогов
Доброго дня , дорогие форумчане. Можете помочь дилетанту в IT-технологиях написать bat/cmd скрипт....

Удалять с заданного каталога все файлы с расширением, которое пользователь введёт с клавиатуры
Создать командный фаил, который будет удалять с заданого в качестве параметра каталога все файлы с...

Как указать ссылку на указатель в качестве формального параметра
Здравствуйте! Есть функция включения элементов в стек. Как правильно написать прототип функции....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru