Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] bat. Копирование папок из текущей директории

Ответить
Настройки темы
CMD/BAT - [решено] bat. Копирование папок из текущей директории

Новый участник


Сообщения: 17
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте.
Как написать батник который копировал бы папки относительно текущей директории, т.е. папки где лежит сам bat-файл? Необходимо:
1. Скопировать из "текущая директория\ folder 111" в "уровень выше текущей директории"
3. Скопировать из "текущая директория\ folder 222" в "C:\Users\User_Name\Documents"


В первом случае надо скопировать папку «folder 111», расположенную директорией ниже в папку директорией выше. Во втором примере папку «folder 222», расположенную директорией ниже в системную папку "Документы".

Отправлено: 20:32, 21-11-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Browning Zed:
1. Скопировать из "текущая директория\ folder 111" в "уровень выше текущей директории" »
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set "sSourceFolder=folder 111"

2>nul md "..\%sSourceFolder%"
xcopy.exe /e /i ".\%sSourceFolder%" "..\%sSourceFolder%\"

endlocal
exit /b 0
Цитата Browning Zed:
3. Скопировать из "текущая директория\ folder 222" в "C:\Users\User_Name\Documents" »
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set "sSourceFolder=folder 222"

2>nul md "C:\Users\User_Name\Documents\%sSourceFolder%"
xcopy.exe /e /i ".\%sSourceFolder%" "C:\Users\User_Name\Documents\%sSourceFolder%\"

endlocal
exit /b 0
Если под User_Name подразумевается текущий пользователь, то:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set "sSourceFolder=folder 222"

2>nul md "%UserProfile%\Documents\%sSourceFolder%"
xcopy.exe /e /i ".\%sSourceFolder%" "%UserProfile%\Documents\%sSourceFolder%\"

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:20, 21-11-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 17
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
Если под User_Name подразумевается текущий пользователь, то:
Да, все верно, текущий пользователь. Последний код отлично работает, спасибо.
Но с первым кодом, где копируем на уровень выше не получилось. Дело в том, что батник запускается через exe-файл лежащий в другом месте, и папка копируется на уровень выше той папки где находится экзешник, а не там где лежит bat. И еще непонятен момент с более глубокими по вложенности уровнями папок, например таким образом:
Скопировать из "текущая директория\folder 1\ folder 2\ folder 3" в "уровень выше текущей директории"

Отправлено: 23:05, 21-11-2018 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Browning Zed:
батник запускается через exe-файл лежащий в другом месте, и папка копируется на уровень выше той папки где находится экзешник, а не там где лежит bat. »
Разумеется, так и должно быть. Если исполняемый файл запускается напрямую из Проводника — его текущим каталогом будет место его расположения. Если этот исполняемый файл запускает пакетный файл без изменения своего текущего каталога и без каких-то дополнительных условий — текущим каталогом для пакетного файла также будет место расположения исполняемого файла. И именно там пакетный файл будет ожидать найти каталог «folder 111». Как и заказывалось.

Меня терзают смутные сомнения, что Вы путаете понятия «текущий каталог» и «каталог, в котором расположен пакетный файл».

Цитата Browning Zed:
И еще непонятен момент с более глубокими по вложенности уровнями папок, например таким образом:
Скопировать из "текущая директория\folder 1\ folder 2\ folder 3" в "уровень выше текущей директории" »
Не вижу никаких проблем:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set "sSourceFolder=folder 3"

2>nul md "..\%sSourceFolder%"
xcopy.exe /e /i ".\folder 1\folder 2\%sSourceFolder%" "..\%sSourceFolder%\"

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:30, 22-11-2018 | #4


Новый участник


Сообщения: 17
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Меня терзают смутные сомнения, что Вы путаете понятия «текущий каталог» и «каталог, в котором расположен пакетный файл »
Да, так и есть, извиняюсь - тут я перепутал.
Спасибо за помощь, с путями копирования вроде разобрался. Но остался один нерешенный вопрос. Копирую через батник папку с файлами в системную папку «Документы». Добавил в код батника ключ: /y, чтобы файлы перезаписывались, но файлам находящимся в папке «Документы» присвоен атрибут «Только чтение», что в итоге влечет запись в командной строке: "Отказано в доступе". Файлы, соответственно, не перезаписываются и ключ: /r не помогает. Как можно выйти из данной ситуации?

Отправлено: 18:21, 22-11-2018 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Browning Zed:
но файлам находящимся в папке «Документы» присвоен атрибут «Только чтение» »
Зачем это было сделано? Очень странно.

Покажите.

Отправлено: 18:46, 22-11-2018 | #6


Новый участник


Сообщения: 17
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Зачем это было сделано? Очень странно.
Покажите. »
Это файлы конфигурации игры (ini файлы), если им не присвоить атрибут «только чтение», игра будет сбрасывать графические настройки на дефолтные.
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set "GetFolder1=folder 3"

2>nul md "%UserProfile%\Documents\%GetFolder1%"
xcopy.exe /e /i /y /r /k ".\Extras\GameSettings\%GetFolder1%" "%UserProfile%\Documents\%GetFolder1%\"

endlocal
exit /b 0
В теории, ключ /r должен перезаписать файл только для чтения, а ключ /k, должен сохранить атрибут «только чтение» у нового файла (который перезаписывает старый). Но этого не происходит.

Отправлено: 19:00, 22-11-2018 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Browning Zed:
Это файлы конфигурации игры (ini файлы), »
Ясно. И всё же — покажите. Посредством attrib.exe.

P.S. Вы знаете имена всех этих файлов?

Отправлено: 19:14, 22-11-2018 | #8


Новый участник


Сообщения: 17
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Ясно. И всё же — покажите. Посредством attrib.exe.
P.S. Вы знаете имена всех этих файлов? »
Если я Вас правильно понял, нужно это?
Код: Выделить весь код
A                    C:\Users\Nikolay\Documents\BioWare\Mass Effect\Config\BIOCredits.ini
A                    C:\Users\Nikolay\Documents\BioWare\Mass Effect\Config\BIOEditor.ini
A    R               C:\Users\Nikolay\Documents\BioWare\Mass Effect\Config\BIOEngine.ini
A    R               C:\Users\Nikolay\Documents\BioWare\Mass Effect\Config\BIOGame.ini
A    R               C:\Users\Nikolay\Documents\BioWare\Mass Effect\Config\BIOGuiResources.ini
A    R               C:\Users\Nikolay\Documents\BioWare\Mass Effect\Config\BIOInput.ini
A                    C:\Users\Nikolay\Documents\BioWare\Mass Effect\Config\BIOParty.ini
A                    C:\Users\Nikolay\Documents\BioWare\Mass Effect\Config\BIOQA.ini
A                    C:\Users\Nikolay\Documents\BioWare\Mass Effect\Config\DefaultEngine.ini
Имена файлов знаю все.

Отправлено: 19:33, 22-11-2018 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Browning Zed:
нужно это? »
Ага.

И что интересно, из приведённого вывода и ранее приведённого Вами кода выясняется масса интересных, никак ранее не упоминавшихся подробностей. То, что Вы описывали в техзадании, имеет мало общего с тем, что Вам на самом деле нужно.

Покажите реально используемый Вами код, не с «set "GetFolder1=folder 3"», а с тем, что там есть у Вас на самом деле.

Отправлено: 01:44, 25-11-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] bat. Копирование папок из текущей директории

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование папок с текущей датой +1 день в названии (кроме выходных) Сантей Скриптовые языки администрирования Windows 8 03-03-2015 23:26
CMD/BAT - выводить в текстовый файл список файлов и папок из директории где запущен APTEM267 Скриптовые языки администрирования Windows 2 07-02-2014 06:32
Запуск скрипта из текущей директории lampich Программирование и базы данных 0 28-12-2012 23:56
Win32 API - Копирование всех файлов из директории DaRiYs Программирование и базы данных 4 03-09-2009 23:36
[решено] как добавить путь к текущей директории в reg файл из bat файла ? mitiya Автоматическая установка приложений 7 27-03-2008 16:12




 
Переход