Показать полную графическую версию : [решено] Перемещение файла/папки в выбранную директорию
Добрый день!
Подскажите, возможно ли посредством 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.
Распаковываю архив в папку
@echo off
cd /d "%~dp2"
"C:\Program Files\7-Zip\7z.exe" x -t* "%~df2" -o"%~dpn2" -y
exit »
Теперь надо, наверное, вызвать explorer.exe выбрать в компьютере папку или создать новую и переместить туда - "%~d?(??)2". »
Если б ещё знать, что такое "%~dp2", "%~df2" и "%~dpn2" в контексте данного кода:dont-know...
Код пакетного файла:
@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
.
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, здравствуйте!
А с помощью "%~dp2", "%~df2" и "%~dpn2" - что в сущности то же, что и с цифрой 1, но в родном к. меню windows, а у меня через мою программу это уже второй параметр и так я "железно" попадаю в нужную мне для работы директорию. »
Приблизительно понятно.
окно консоли открыто (можно ли его не видеть?) »
Я думаю, что с этим надо будет нам разбираться, когда отладим код.
но в выбранную папку содержимое архива не переносится »
А что переносится? Вся папка целиком? Или ничего не переносится?
созданную папку с содержимым архива с места создания (а это рядом с архивом) переместить в пустую папку которая выбрана или скопировать, а первую удалить »
Попробуйте проще (разархивирование в выбранной папке):
@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
.
И вопрос: я запаковал этот код в батник, но в коде есть ...vbscript..., не в vbs ли надо паковать случайно, хотя в bat вроде работает »
Всё правильно. Код VBScript запускается из пакетного файла.
Georgio,
Этот код работает, но если в пути папка в кириллице (самого архива или папки назначения), то пишет ее имя абракадаброй в консоли, но распаковывает правильно, путь находит. Кодировки уже менял по-разному в батнике и сохранял и в 866 и в 1251 (у меня AkelPad) - все равно так же? И окно консоли висит, но уже пустое, но висит.
Еще такой вопрос ..."%~df2" -o"%%i" - так идет распаковка в папку, ..."%~df2" -o"%%i\%~n2" - так в новосозданную папку с именем архива, а в случаях запаковать, два варианта что у меня в шапке как-то также будет?
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", то все как по маслу.
Все-таки с кодом
@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
работает как надо, просто в консоли смотрел при проверке присутствуют кракозябры в имени, а вот как убрать висящее окно консоли? Пробовал конвертировать в .exe - получается убрать консоль (в скрытом), но гораздо дольше думает меню чем напрямую в bat, реально в батнике убрать или может лучше все в vbs сделать с скрытием окна консоли как-то, подскажите.
Перебором утилит определил, что максимально быстро скрвает nircmd.exe, пока буду ее использовать, а вот скрипт на vbs для скрытия bat скрывает отлично но почему-то не выполняется дальше работа bat - не происходит распаковка файла в папку :unsure:
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.