CMD/BAT - Назначить переменную названия папки имя которой неизвестно

Ответить
Аватара пользователя
minutka15

CMD/BAT - Назначить переменную названия папки имя которой неизвестно

Сообщение minutka15 »

Есть код который создает папки от имен .exe файлов и перекидывает туда .exe и .bmp файлы которые лежат в той-же папке a .txt файлы не в конечный путь.





Код:

Код: Выделить всё

@echo off
for %%f in (*.exe,*.bmp) do (
md "%%~nf\Имя папки""
move "%%f" "%%~nf\Имя папки"
)
for %%f in (*.txt do (
move "%%f" "%%~nf"
) 
Exit /B

Но я хотел бы кое что подправить тут, а именно имя папки которое я прописываю в скрипт.

Я хочу добавить это действие на правый клик мыши с командой "переместить файлы"

и для того что-бы имя папки не прописывать в скрипт я хочу создать папку с нужным мне названием в рабочей папке, а скрипт будет работать создавая имя этой папки.

Теперь исходя из того что имя папки будет носить то имя папки которую я создал, я использовал в скрипте строку таким образом





Код:

Код: Выделить всё

@echo off
for /f %d in ('dir /B /A:D %CD%') do set "foldername=%~d"
for %%f in (*.exe,*.bmp) do (
md "%%~nf\%foldername%"
move "%%f" "%%~nf\%foldername%"
)
for %%f in (*.txt do (
move "%%f" "%%~nf"
) 
Exit /B

Однако безуспешно.



И вот вопрос, как назначить неизвестное имя папки в переменную, которая бы назначала эти имена создаваемых папок в скрипте ?
Аватара пользователя
Sham

Re: CMD/BAT - Назначить переменную названия папки имя которой неизвестно

Сообщение Sham »

А в какой ветке прописываете - * или directory? Вызов из реестра вроде бы не меняет текущую директорию. Какой-нибудь cd /d "%V" надо вручную прописать либо в реестре с командой типа "cmd.exe /c (cd /d "%V" && script.bat)", либо передать %V в качестве параметра скрипту, в котором это будет %1
Аватара пользователя
minutka15

Re: CMD/BAT - Назначить переменную названия папки имя которой неизвестно

Сообщение minutka15 »

Цитата Sham:



А в какой ветке прописываете - * или directory? Вызов из реестра вроде бы не меняет текущую директорию. Какой-нибудь cd /d "%V" надо вручную прописать либо в реестре с командой типа "cmd.exe /c (cd /d "%V" && script.bat)", либо передать %V в качестве параметра скрипту, в котором это будет %1
CMD/BAT - Назначить переменную названия папки имя которой неизвестно




Что-бы работало по правому клику в папке В реестр добавляю такую регу:





Код:

Код: Выделить всё

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\Поместить файлы в папки]
"Icon"="C:\\Users\\SomeUserName\\AppData\\Roaming\\MyProgram\\icons\\MyIcon.ico"
[HKEY_CLASSES_ROOT\*\shell\Поместить файлы в папки\command]
@="C:\\Users\\SomeUserName\\AppData\\Roaming\\MyProgram\\MoveFiles.exe \"%1\""

Разумеется конвертировав батник в .exe файл



На счет смены директории то все фичи которые я добавлял ранее, работают безотказно.
Аватара пользователя
Sham

Re: CMD/BAT - Назначить переменную названия папки имя которой неизвестно

Сообщение Sham »

передаёте контекстный файл %1 в параметры, а используете %CD% - как это понимать?
Аватара пользователя
Sham

Re: CMD/BAT - Назначить переменную названия папки имя которой неизвестно

Сообщение Sham »

Цитата Sham:



передаёте контекстный файл %1 в параметры, а используете %CD% - как это понимать?
CMD/BAT - Назначить переменную названия папки имя которой неизвестно




Пока я никуда ничего не передаю, я вам показал как я прописывал в реестре свои исторические безделушки.
Аватара пользователя
Sham

Re: CMD/BAT - Назначить переменную названия папки имя которой неизвестно

Сообщение Sham »

Какие критерии выбора этой неизвестной папки? %foldername% содержит имя последней папки при сортировке по-умолчанию (по имени). dir /B /A:D /O:D даст самую свежую папку в конце.
Аватара пользователя
Sham

Re: CMD/BAT - Назначить переменную названия папки имя которой неизвестно

Сообщение Sham »

Проблему с перетаскиванием решил создавая файл вместо папки.

Создаю файл с нужным мне именем с любым расширением (в моем случае .ai)





Код:

Код: Выделить всё

@echo off
for %%A in (*.ai) do set "filename=%%~nA"
for %%f in (*.exe,*.bmp) do (
md "%%~nf\%filename%"
move "%%f" "%%~nf\%filename%"
)
for %%f in (*.txt) do (
move "%%f" "%%~nf"
)
del "*.ai" /q
Exit /b

Конвертировав батник в .exe работает из папки на правый клик мышки
Ответить

Вернуться в «Скриптовые языки администрирования Windows»