Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Назначить переменную названия папки имя которой неизвестно (http://forum.oszone.net/showthread.php?t=355203)

minutka15 01-05-2024 15:34 3026931

Назначить переменную названия папки имя которой неизвестно
 
Есть код который создает папки от имен .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 01-05-2024 20:45 3026936

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

minutka15 01-05-2024 21:04 3026937

Цитата:

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

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

Код:

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 01-05-2024 21:24 3026938

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

minutka15 01-05-2024 22:31 3026940

Цитата:

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

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

Sham 01-05-2024 23:43 3026941

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

minutka15 02-05-2024 23:58 3026959

Проблему с перетаскиванием решил создавая файл вместо папки.
Создаю файл с нужным мне именем с любым расширением (в моем случае .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 работает из папки на правый клик мышки


Время: 02:01.

Время: 02:01.
© OSzone.net 2001-