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

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

Ответить
Настройки темы
CMD/BAT - [решено] Перемещение файла/папки в выбранную директорию

Ветеран


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


Конфигурация

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


Добрый день!
Подскажите, возможно ли посредством bat переместить файл или папку в выбранную директорию на компьютере. Например:

Архивирую папку
@echo off
cd /d "%~dp2.."
set slesh=%~dp2
If "%slesh:~-1%"=="\" set slesh=%slesh:~0,-1%
"C:\Program Files\7-Zip\7z.exe" a "%slesh%" "%~dp2"
exit

Или файл
@echo off
cd /d "%~dp2"
"C:\Program Files\7-Zip\7z.exe" a "%~dpn2" "%~df2"
exit

Распаковываю архив в папку
@echo off
cd /d "%~dp2"
"C:\Program Files\7-Zip\7z.exe" x -t* "%~df2" -o"%~dpn2" -y
exit

Или на месте
@echo off
cd /d "%~dp2"
"C:\Program Files\7-Zip\7z.exe" x -t* "%~df2" -o"%~dp2" -y
exit

Теперь надо, наверное, вызвать explorer.exe выбрать в компьютере папку или создать новую и переместить туда - "%~d?(??)2". На это у меня ума (вернее опыта) не хватает, а может это и нереально. На vbs тоже устроит, если невозможно (если вообще возможно) на bat.

Отправлено: 19:07, 14-05-2015

 

Ветеран


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

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


Цитата alpap:
Распаковываю архив в папку
@echo off
cd /d "%~dp2"
"C:\Program Files\7-Zip\7z.exe" x -t* "%~df2" -o"%~dpn2" -y
exit »
Цитата alpap:
Теперь надо, наверное, вызвать explorer.exe выбрать в компьютере папку или создать новую и переместить туда - "%~d?(??)2". »




Если б ещё знать, что такое "%~dp2", "%~df2" и "%~dpn2" в контексте данного кода...



Код пакетного файла:


Код: Выделить весь код
@echo off

cd /d "%~dp2"

"C:\Program Files\7-Zip\7z.exe" x -t* "%~df2" -o"%~dpn2" -y

>nul chcp 1251
for /f "delims=" %%i in ('
 mshta vbscript:Execute("On Error Resume Next:CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write(CreateObject(""Shell.Application"").BrowseForFolder(0,"""",1,""::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"").Self.Path):Close()"^)
') do (
 >nul (chcp 866& move/y "%~dpn2" "%%i\")
)

exit/b 0

.
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:37, 15-05-2015 | #2



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

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


Ветеран


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

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


Georgio,
Здравствуйте, Вы мне в другой теме так помогли - спасибо еще раз. Я там объяснял что такое "%~dp2", "%~df2" и "%~dpn2", здесь забыл. Я пользуюсь сторонней программой для редактирования контекстного меню, но там есть не все пункты которые мне нужны для комфортной работы и поэтому несколько приходиться дорабатывать с помощью батников. Более простые я тяну, а в принципе в программировании не силен, вот и приходиться просить помощи. А с помощью "%~dp2", "%~df2" и "%~dpn2" - что в сущности то же, что и с цифрой 1, но в родном к. меню windows, а у меня через мою программу это уже второй параметр и так я "железно" попадаю в нужную мне для работы директорию.
Теперь по делу:
Например: "%~df2"=C:\Users\Papenko\Desktop\apxiv.7z, идет распаковка по адресу -o"%~dpn2"=C:\Users\Papenko\Desktop\apxiv и она естественно происходит, окно консоли открыто (можно ли его не видеть?) и появляется окно проводника с выбором, где есть возможность выбрать папку или создать, что и хотелось - уже благодарю, но в выбранную папку содержимое архива не переносится. Но уже неплохо, осталось созданную папку с содержимым архива с места создания (а это рядом с архивом) переместить в пустую папку которая выбрана или скопировать, а первую удалить. Не знаю смогу ли сам, буду очень благодарен если поможете.
И вопрос: я запаковал этот код в батник, но в коде есть ...vbscript..., не в vbs ли надо паковать случайно, хотя в bat вроде работает, только требуется доработка.
Файл 125226

Последний раз редактировалось alpap, 15-05-2015 в 15:55.


Отправлено: 15:23, 15-05-2015 | #3


Ветеран


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

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


alpap, здравствуйте!




Цитата alpap:
А с помощью "%~dp2", "%~df2" и "%~dpn2" - что в сущности то же, что и с цифрой 1, но в родном к. меню windows, а у меня через мою программу это уже второй параметр и так я "железно" попадаю в нужную мне для работы директорию. »


Приблизительно понятно.




Цитата alpap:
окно консоли открыто (можно ли его не видеть?) »


Я думаю, что с этим надо будет нам разбираться, когда отладим код.




Цитата alpap:
но в выбранную папку содержимое архива не переносится »


А что переносится? Вся папка целиком? Или ничего не переносится?




Цитата alpap:
созданную папку с содержимым архива с места создания (а это рядом с архивом) переместить в пустую папку которая выбрана или скопировать, а первую удалить »


Попробуйте проще (разархивирование в выбранной папке):


Код: Выделить весь код
@echo off

cd/d "%~dp2"

>nul chcp 1251
for /f "delims=" %%i in ('
 mshta vbscript:Execute("On Error Resume Next:CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write(CreateObject(""Shell.Application"").BrowseForFolder(0,"""",1,""::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"").Self.Path):Close()"^)
') do (
 >nul chcp 866& "C:\Program Files\7-Zip\7z.exe" x -t* "%~df2" -o"%%i" -y
)

exit/b 0

.




Цитата alpap:
И вопрос: я запаковал этот код в батник, но в коде есть ...vbscript..., не в vbs ли надо паковать случайно, хотя в bat вроде работает »


Всё правильно. Код VBScript запускается из пакетного файла.

Отправлено: 16:55, 15-05-2015 | #4


Ветеран


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

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


Georgio,
Этот код работает, но если в пути папка в кириллице (самого архива или папки назначения), то пишет ее имя абракадаброй в консоли, но распаковывает правильно, путь находит. Кодировки уже менял по-разному в батнике и сохранял и в 866 и в 1251 (у меня AkelPad) - все равно так же? И окно консоли висит, но уже пустое, но висит.
Еще такой вопрос ..."%~df2" -o"%%i" - так идет распаковка в папку, ..."%~df2" -o"%%i\%~n2" - так в новосозданную папку с именем архива, а в случаях запаковать, два варианта что у меня в шапке как-то также будет?

Последний раз редактировалось alpap, 16-05-2015 в 10:18.


Отправлено: 10:00, 16-05-2015 | #5


Ветеран


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

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


Georgio,
Если убрать из батника все кодировки, а сам он в 866, то:
C:\Users\Papenko\Desktop>("C:\Program Files\7-Zip\7z.exe" x -t* "C:\Users\Papenko\Desktop\Архив.7z" -o"C:\Users\Papenko\Desktop\╧ряър\Архив" -y ) - (скопировал с консоли), теперь папку не находит (она называется "Папка"), создает папку "╧ряър" и в нее успешно помещает папку "Архив" с содержимым архива. Как я понимаю проблема где-то в кодировке вот этого вложенного vbs, надо как-то ее менять ну или копать в том напрвлении.
Если в этом варианте папка назначения "Papka", то все как по маслу.

Последний раз редактировалось alpap, 16-05-2015 в 10:24.


Отправлено: 10:17, 16-05-2015 | #6


Ветеран


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

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


Все-таки с кодом

@echo off

cd/d "%~dp2"

>nul chcp 1251
for /f "delims=" %%i in ('
mshta vbscript:Execute("On Error Resume Next:CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write(CreateObject(""Shell.Ap plication"").BrowseForFolder(0,"""",1,""::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"").Self.Path):Close()"^)
') do (
>nul chcp 866& "C:\Program Files\7-Zip\7z.exe" x -t* "%~df2" -o"%%i" -y
)

exit/b 0

работает как надо, просто в консоли смотрел при проверке присутствуют кракозябры в имени, а вот как убрать висящее окно консоли? Пробовал конвертировать в .exe - получается убрать консоль (в скрытом), но гораздо дольше думает меню чем напрямую в bat, реально в батнике убрать или может лучше все в vbs сделать с скрытием окна консоли как-то, подскажите.

Отправлено: 02:00, 18-05-2015 | #7


Ветеран


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

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


Перебором утилит определил, что максимально быстро скрвает nircmd.exe, пока буду ее использовать, а вот скрипт на vbs для скрытия bat скрывает отлично но почему-то не выполняется дальше работа bat - не происходит распаковка файла в папку

Отправлено: 13:04, 18-05-2015 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск файла, перемещение, удаление исходной папки cmd\bat KitsuNeko Скриптовые языки администрирования Windows 5 08-04-2013 18:21
CMD/BAT - [решено] Перемещение файлов из одной папки в разные в зависимости от имени файла Sarge81 Скриптовые языки администрирования Windows 4 20-09-2011 04:20
CMD/BAT - [решено] Выбор файла из меню и копирование в нужную директорию. gaikinn Скриптовые языки администрирования Windows 10 17-02-2011 13:52
Разное - Как изменить добавление надписи "Копия" при копировании файла в исходную директорию Keleborn Microsoft Windows 2000/XP 3 08-07-2009 14:21
Разное - [решено] Перемещение папки Users nikkor7 Microsoft Windows Vista 2 13-04-2009 11:58




 
Переход