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

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

nineline 31-05-2012 15:59 1925585

Создание папок из txt файла
 
Добрый день.
Требуется помощь местных гуру в написании батника :)
Требуется создать n-ое кол-во папок, имена которых перечислены в txt файле.
Количество и имена папок будут всегда разными, так что задать для каждой папки свою переменную не получится.
Перелопатил весь форум, не нашел ничего, чтобы мне помогло.

sl2103 31-05-2012 16:16 1925591

ты хоть начни, а мы уже общими усилиями постараемся помочь, чем сможем...

Anonymоus 31-05-2012 16:46 1925615

Они по одной на строку перечислены?
Код:

@Echo Off
For /F "usebackq delims=" %%D In ("file.txt") Do (MD "%%D")


RostVY 31-05-2012 16:48 1925619

а сразу в тхт-файле перечислить папки с 'mkdir' перед каждым именем не получится? ;)

Iska 31-05-2012 18:08 1925640

RostVY, а зачем? Один из основных принципов программирования — отделяйте мух от котлет данные от кода.

nineline 03-06-2012 00:06 1926975

Спасибо огромное, работает даже если имена папок перечислены не в одной строкой.
Теперь появилась необходимость этим папкам раздать права доступа, которые так же перечислены в отдельном файле.
Т.е. есть два файла, в первом по порядку перечислены имена папок, а во втором по порядку права доступа для этих папок.
Пример:
Файл1:
Цитата:

01
02
03
Файл2:
Цитата:

domain\user1
domain\user2
domain\user3
Итог:
Папка 01, права для папки: domain\user1
Папка 02, права для папки: domain\user2
Папка 03, права для папки: domain\user3
Перечитал тонну страниц и примеров, но не получается :(

iDrug 03-06-2012 03:23 1927061

nineline, http://skwire.dcmembers.com/wb/pages...-2-folders.php ?

nineline 03-06-2012 15:56 1927263

Использую этот скрипт:
Код:

@echo off
set out=folders866.ini
chcp 1251 >nul
for /f "tokens=*" %%a in (folders.ini) do call :convert %%a
goto :eof
:convert
chcp 866 >nul
echo %*>>%out%
chcp 1251 >nul


@echo off
SetLocal EnableExtensions EnableDelayedExpansion
For /F "usebackq delims=" %%F In ("folders866.ini") Do (MD "%disk%:\%%F")
del folders866.ini

Он перегоняет инишку в нужную мне кодировку и создает папки, но вместо имен папок выдает крякозябры.
Если первую часть скрипта запускать в отдельном батнике, то все ок.
Где я накосячил? :) Надо было какой-то разделитель ставить?

Upd:
Нашел косяк :)
Последнее chcp 1251 >nul лишнее :)

nineline 03-06-2012 18:17 1927335

Понимаю, что надоел уже, но что неправильно в этой строке?
Код:

For /F "tokens=1" %%q In ("folders866.ini") Do (for /F "tokens=2" %%i in ("access.ini") do (cacls "c:\%%q" /E /T /C /P "domain\%%i":F ))

Iska 03-06-2012 22:53 1927498

nineline, все эти chcp 1251/866 ни к чему. Просто сохраняйте файл с именами папок и сам пакетный файл в кодировке OEM/866.

nineline 04-06-2012 15:04 1927812

В итоге почти все нагуглил :)
Остался последний вопрос, имеется несколько циклов for, как заставить выполняться второй только после завершения первого?

Latinyanin 13-12-2020 20:24 2942860

Anonymоus,
Ваш код
Код:

@Echo Off
For /F "usebackq delims=" %%D In ("file.txt") Do (MD "%%D")

как с ним работать? Я его копирую в текстовый документ, сохраняю,,,,а под каким именем? С каким расшрением?

или его надо в командной строке вписывать? Мне б обьяснения поподробнее, если можно

Iska 13-12-2020 23:19 2942868

Цитата:

Цитата Latinyanin
как с ним работать? »

Просто запустить.

Цитата:

Цитата Latinyanin
Я его копирую в текстовый документ, сохраняю,,,,а под каким именем? »

Под любым.

Цитата:

Цитата Latinyanin
С каким расшрением? »

«.cmd».

Цитата:

Цитата Latinyanin
или его надо в командной строке вписывать? »

В командной строке не нужно удвоение символов «%»:
Код:

for /f "usebackq delims=" %i in ("file.txt") do @md "%~i"

Latinyanin 14-12-2020 14:43 2942935

Вложений: 2
Iska,
Сделал как подсказали, попробовал запустить файлик, но,,,,,
Вообщем не образовались папки с потребными именами. Дважды по стартовому файлу кликал и через от имени админа запускал и ничего! Посмотрите пожжалуйста чего ж не так?

Latinyanin 14-12-2020 14:45 2942936

архив с

Iska 14-12-2020 15:46 2942943

Цитата:

Цитата Latinyanin
Сделал как подсказали, »

Не сделали:
Скрытый текст

Latinyanin 15-12-2020 14:51 2943032

Iska,
но ведь и я список под именем file.txt сохранил!
А про кодировку,,,, словами напишите - на скрине не все вижу
Надо обязательно все сохранять толькл в far manager ?


Или в креаторе все дело? не так оформлен соххранен?

Iska 15-12-2020 16:24 2943041

Latinyanin, в любом редакторе, который поддерживает сохранение в кодировке OEM/866: AkelPad, Bred2/Bred3, Notepad++ (ограниченно). Я лично пользую редактор Far Manager'а.

Latinyanin 17-12-2020 12:33 2943284

Iska,



ОНО САМОЕ?

сам cmd файлик тоже в
https://www.upload.ee/files/12652344/trying.zip.html
такой кодировке сохранять?

МНЕ ДЛЯ ОБЩЕГО РАЗВИТИЯ
Скачал и установил far Manager. но!


как тут ? до моего файла добираться?

Iska 17-12-2020 16:55 2943299

Цитата:

Цитата Latinyanin
ОНО САМОЕ? »

Да.

Цитата:

Цитата Latinyanin
сам cmd файлик тоже в такой кодировке сохранять? »

Да. Но в данном случае сие неважно — в данном пакетном файле нет символов за пределами ASCII.

Цитата:

Цитата Latinyanin
как тут ? до моего файла добираться? »

А где он у Вас?

Latinyanin 18-12-2020 11:55 2943378

Цитата:

Цитата Iska
А где он у Вас? »

на рабочем столе был, но пока ладно, можно и погодить с far manager. Тем более Akelpad выдал потребную для задачи решения кодировку. Главное ведь то, что cmd креатор файлик СРАБОТАЛ как надо! Папки созданы были по первому клику!

А вот можно ли с помощью кода cmd переместить файлы в эти папки? Файлы носят такие же ровно имена. Так это выглядит
https://d.radikal.ru/d31/2012/45/31b92ce8b832.jpg

alpap 18-12-2020 14:33 2943387

Цитата:

Цитата Latinyanin
Папки созданы были по первому клику! »

непонятная радость ...
Цитата:

Цитата Latinyanin
можно ли с помощью кода cmd переместить файлы в эти папки? »

А можно озвучивать задачу полностью? Чтобы не делать двойную задачу как в вашем случае. Зачем предварительно создавать папки если можно это делать по наличию файла последовательно:
Код:

@echo off
set "d=Полный путь к папке с файлами"

pushd "%d%"
 for /f "delims=" %%f in ('dir /a-d/b "*.*"^|findstr /ve /c:"\.bat" /c:"\.cmd"') do (
  if not exist "%%~nf" md "%%~nf"
  >nul move "%%f" "%%~nf"
 )
popd
pause

Подозреваю сейчас будет:
- надо сравнить имена файлов из списка в txt с именами реальных в папке и что совпадают со списком переместить в одноименные папки
товарищ, может хорош темнить, озвучивайте задачу полностью как есть, целиком и желательно цель конечную. Решаемо почти все, но малой кровью только в случае правильного и полного условия.

Iska 18-12-2020 14:54 2943392

Цитата:

Цитата Latinyanin
на рабочем столе был, »

Тогда Ctrl-\, переместиться стрелками к каталогу с именем Users, Enter, переместиться к каталогу с именем профиля учётной записи, Enter, переместиться к каталогу с именем Desktop, Enter, переместиться искомому файлу. Или ввести в командной строке Far Manager'а:
Код:

goto:%UserProfile%\Desktop\Имя Вашего пакетного файла.cmd
и нажать Enter. Или установить плагин DiskMenu и добавить в нём ссылку на Рабочий стол:
Скрытый текст
Код:

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

 Поддерживаются следющие типы элементов:

 1. Ссылка на каталог
    Элемент представляет собой ссылку на локальныю папку или
    сетевой ресурс.
    Например:
      Локальная папка: C:\SomeFolder\Sub Folder
      Сетевой ресурс:  \\some_server\share\my_folder
    В качестве ссылок можно использовать переменные окружения.
    Например:          %FARHOME%\Plugins

2. Специальная ссылка
    Ссылка на специальную папку (Рабочий стол, Мои документы и т.д.).

 3. Вызов внешнего плагина
    Ссылка на внешний плагин Far, необходмо указать префикс вызова плагина.
    Например:
      Вызов плагина FTP: ftp://ftp.domain.local

 4. Путь из реестра
    Ссылка определяется из значения указанного ключа реестра.
    Например:
      В ветке реестра HKCU\Software\Far2\Layout\PassiveFolder
      существует значение D:\My folder
      В таком случае, указав в качестве ссылки:
          Корневой раздел: HKEY_CURRENT_USER
          Ключ реестра:    Software\Far2\Layout\PassiveFolder
      будет прозведен переход в папку D:\My folder.

 5. Вложенное меню
    Ссылка на вложенное меню.


и переходить через Alt-F1/F2. И ещё куча способов.

Latinyanin 19-12-2020 10:36 2943455

Цитата:

Цитата alpap
непонятная радость ... »

много времени и нервов ушло - потому и радость!

Цитата:

Цитата alpap
А можно озвучивать задачу полностью? Чтобы не делать двойную задачу как в вашем случае. Зачем предварительно создавать папки если можно это делать по наличию файла последовательно: »

нет, я не темню ни разу! Просто откуда мне было знать, что можно одновременно решить задачу и по созданию папок из списка и по помещению в эти папки одноименных файлов?Я же не кодер какой и подумал мол сначала одну проблему надо решить, затем вторую - последовательно.

Используя ваш код
https://www.upload.ee/files/12659543/MOVING.zip.html

и даже без указания точного пути к папке мои файлы перемещены были успешно в нужные, одноименные папки – несмотря на такую картинку

впрочем на нее можно и не обращать внимания, раз фунционирует. Хотя конечно от кода одновременно решающего обе задачи не откажусь!

b]Iska[/b],
спасибо! Япока что akelpad буду использовать

alpap 19-12-2020 15:28 2943490

Цитата:

Цитата Latinyanin
даже без указания точного пути »

это если bat в той же папке (именно по этой причине стоит защита: ...^|findstr /ve /c:"\.bat" /c:"\.cmd"), а при указании пути код будет работать с любого места и если точно не будет в этой папке, то защиту из кода можно убрать.
Цитата:

Цитата Latinyanin
от кода одновременно решающего обе задачи не откажусь! »

именно это сейчас и выполнено? Или первая задача до сих пор имеет силу:
Цитата:

Цитата nineline
... имена которых перечислены в txt файле »


Latinyanin 21-12-2020 16:52 2943681

alpap,

Цитата:

Цитата alpap
это если bat в той же папке »

в нейродимой, в ней

Цитата:

Цитата alpap

именно это сейчас и выполнено? Или первая задача до сих пор имеет силу:



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



И еще момент такой!
Можно ли средствами cmd создать список файлов находящийся в одной, отдельно взятой



папке - обязательно БЕЗ расширений, список в формате текстового документа, список сименм скажем file с кодировкой OEM 866?

Причем чтобы сам cmd фалик в такой список не попадал! Просто не всегда удобно работать с тотал коммандер, а потом уж с akelpad/

Iska 21-12-2020 19:48 2943697

Цитата:

Цитата Latinyanin
список сименм скажем file с кодировкой OEM 866?
Причем чтобы сам cmd фалик в такой список не попадал! Просто не всегда удобно работать с тотал коммандер, а потом уж с akelpad/ »

Вот потому-то я и пользую Far Manager:
  • кодировка файла меняется на ходу;
  • пакетные файлы находятся отдельно, а не «прыгают» по обрабатываемым каталогам туда-сюда, запуск пакетного файла в потребном каталоге выглядит обычно так: пакетный файл на одной панели, обрабатываемый каталог на другой панели — Tab (перключились на панель с пакетным файлом), стрелки (перешли к пакетному файлу), Ctrl-F (вставка полного пути к пакетному файлу в командную строку), Tab (вернулись на другую панель), Enter (запустили пакетный файл на исполнение в обрабатываемом каталоге);
    никаких проблем поработать с редактором: F4 — и редактируй, Ctrl-Tab — ты опять в панелях, Ctrl-Tab — снова в редакторе.
Более чем удобно.

Latinyanin 22-12-2020 13:31 2943757

Iska,
короче, нет никак нельзя с помощью cmd файлика создавать списки указанные, понял

Iska 22-12-2020 14:40 2943780

Latinyanin, можно.

Latinyanin 22-12-2020 14:54 2943784

Iska,

Как сделать aKELPAD доступным через ПКМ?

мой вариант, вернее в сети найденный

https://www.upload.ee/files/12672909/SPISOK.zip.html


Код:

chcp 1251

echo %date% %time% >file.txt

dir /b /d >>spisok.txt

© Public-pc.com Источник: https://public-pc.com/how-to-get-a-list-of-files-in-a-folder-in-a-text-file/

ВСЕ ТАКИ работает или неправильно оформлен был?
почему? Как грамотнее?

Iska 22-12-2020 15:18 2943791

Цитата:

Цитата Latinyanin
Как сделать aKELPAD доступным через ПКМ? »

Latinyanin, зачем? Открывайте потребное через Открыть с помощью…. Либо, коль пользуете Total Commander — настройте через него:



Цитата:

Цитата Latinyanin
chcp 1251 »

ЗАЧЕМ?!! Зачем chcp 1251, если Вам нужен результат в OEM/866?

Цитата:

Цитата Latinyanin
dir /b /d »

Вам разве нужен список в несколько столбцов? Для чего?!

Latinyanin 23-12-2020 12:19 2943913

Iska,
alpap,

Цитата:

Цитата Iska
зачем? Открывайте потребное через Открыть с помощью »

через "Открыть с помощью" не сразу настроилось, сначала в списке установленных программ не отображалось вообще,
настроилось, жаль в быстром списке все равно нет ее

alpap 23-12-2020 12:52 2943920

еще раз
Цитата:

Цитата Iska
зачем? »

если работаете в AkelPad выставьте в настройках: Создавать файлы в кодировке 866, Сохранять файлы в 866. И всегда работайте только с этой кодировкой. При случае когда вам пришлют файл в 1251, в открытом файле сменили кодировку. почитали.

alpap 23-12-2020 13:07 2943926

Цитата:

Цитата Latinyanin
не сразу настроилось »

а зачем (опять же) так сложно. В AkelPad удобнее работать, выставьте в его настройках открывать txt, list, ini ... или в системе это сделайте, почитайте как правильно это делать.

Latinyanin 23-12-2020 13:25 2943928

Цитата:

Цитата Iska
ЗАЧЕМ?!! Зачем chcp 1251, если Вам нужен результат в OEM/866? »

так?

Цитата:

Цитата alpap
если работаете в AkelPad выставьте в настройках: Создавать файлы в кодировке 866, Сохранять файлы в 866. И всегда работайте только с этой кодировкой. При случае когда вам пришлют файл в 1251, в открытом файле сменили кодировку. почитали. »


верно?

Цитата:

Цитата Iska
Вам разве нужен список в несколько столбцов? Для чего?! »

у меня один столбец, а не несколько Другое дело, что зачем-то вычставляется дата и сам cmd файлик

в списке

alpap 23-12-2020 14:07 2943933

Цитата:

Цитата Latinyanin
верно? »

да

Iska 24-12-2020 00:44 2944005

Цитата:

Цитата Latinyanin
так? »

Нет.

Цитата:

Цитата Latinyanin
зачем-то вычставляется дата и сам cmd файлик »

Потому что у Вас в пакетном файле сказано вставлять дату и время. И Вы по-прежнему держите пакетный файл в том же каталоге, что и обрабатываете. Это неправильно.


Вот пакетный файл Make Dir and Move file.cmd:
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%~1

if defined sSourceFolder (
        pushd "%sSourceFolder%" && for /f "usebackq delims=" %%i in (
                `2^>nul dir /b /a:-d /o:n "*.*"`
        ) do (
                2>nul md "%%~ni"
                move "%%~i" "%%~ni\"
        ) || (
                echo Can't find source folder [%sSourceFolder%].
                exit /b 2
        )
) else (
        echo Usage: %~nx0 ^<Source folder^>
        exit /b 1
)

endlocal
exit /b 0


Кладёте его в любой каталог. Далее:

1. Создаёте на этот пакетный файл ярлык в %AppData%\Microsoft\Windows\SendTo:
Скрытый текст

Используете команду контекстного меню папки Отправить на этот ярлык:
Скрытый текст

Получаете результат:
Скрытый текст


2. Создаёте ярлык на этот пакетный файл на Рабочем столе. Перетаскиваете на этот ярлык папку из Проводника. Результат — тот же.

3. В Total Commander'е открываете на одной панели — каталог с пакетным файлом, на другой панели — родительский каталог для искомого каталога с файлами для обработки:
Скрытый текст

Выделив курсором пакетный файл на панели, нажимаете Ctrl-Shift-Enter, подставляя тем самым полный путь к пакетному файлу в командную строку:
Скрытый текст

Нажимате Tab, выделяете на соседней панели искомый каталог с файлами, опять нажимаете Ctrl-Shift-Enter, подставляя в командную строку полный путь к искомому каталогу:
Скрытый текст

Нажимаете Enter, отправляя содержимое командной строки интерпретатору команд на исполнение — получаете результат:
Скрытый текст


И тому подобное.

Latinyanin 24-12-2020 15:41 2944066

Iska,
спасибо, конечно

Latinyanin 21-01-2021 15:35 2947119

Iska,

Снова привет!



.
Если вам не трудно будет мне нужен скрипт небольшой, который бы "допилил" под мои нужды результаты работы FB2Toolbox. На скриншооте
FB2Toolbox.exe
виден список книг одной серии. Скрипт должен добавить в имя файла два компонента:
один пробел перед и после каждого тире(-)
добавить ноль перед каждой цифрой списка от 1 до 9
сама папка с файлами для переименовывания
Возможно?

Может надо отдельную тему создать?

Latinyanin 21-01-2021 18:19 2947127

Ладно, отдельную тему создам тогда

Iska 21-01-2021 19:37 2947135

Да, лучше отдельную тему.

Latinyanin 22-01-2021 14:54 2947260

Цитата:

Цитата Iska
Да, лучше отдельную тему. »

создаю


Время: 02:19.

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