|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Корректировка кода что б не зависеть от жесткого пути к имени файла |
|
|
CMD/BAT - [решено] Корректировка кода что б не зависеть от жесткого пути к имени файла
|
Новый участник Сообщения: 40 |
Код, представленный ниже, отлично справляется со своей задачей перемешивания строк в файле. Проблема в том, что у него в условиях жестко задаются пути к файлам in/out. В приведенном примере у меня задан путь "...\MPL\Chillout\Chillout.alb". И естественно обрабатывается только этот файл. У меня же в папке "MPL" лежит 20 подпапок с разными названиями и в каждой лежит файл "*.alb" с таким же именем, как и папка. Мне нужна обработка всех файлов "*.alb" во всех подпапках папки "MPL".
@echo off set "in=E:\MIX\MPL\Chillout\Chillout.alb" set "out=E:\MIX\MPL\Chillout\Chillout.alb" setlocal enabledelayedexpansion for /f "usebackq tokens=1,2*" %%i in ("%in%") do ( set $%%j$!random!=%%i %%j %%k ) for /f "tokens=1,2 delims=$=" %%i in ('set $') do ( if not "%%i"=="!x!" ( set /a m+=1 set x=%%i ) set !m!$!random!=!$%%i$%%j! ) for /l %%i in (1 1 %m%) do ( set $random=!random! for /f "delims==" %%j in ('set %%i$') do ( set !$random!$$!random!=!%%j! ) for /f "delims==" %%j in ('set !$random!$$') do ( set /a n+=1 set $$!n!$!random!=!%%j! ) set n= ) >"%out%" ( for /f "tokens=2 delims==" %%i in ('set $$') do ( echo %%i ) ) exit /b |
|
Отправлено: 15:39, 26-02-2016 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать Например так.
@echo off setlocal enabledelayedexpansion pushd E:\MIX\MPL\ for /f "delims=" %%y in ('dir /b /a:d') do ( set "in=%%~fy\%%~ny.alb" set "out=%%~fy\%%~ny.alb" for /f "usebackq tokens=1,2*" %%i in ("%in%") do ( set $%%j$!random!=%%i %%j %%k ) for /f "tokens=1,2 delims=$=" %%i in ('set $') do ( if not "%%i"=="!x!" ( set /a m+=1 set x=%%i ) set !m!$!random!=!$%%i$%%j! ) for /l %%i in (1 1 %m%) do ( set $random=!random! for /f "delims==" %%j in ('set %%i$') do ( set !$random!$$!random!=!%%j! ) for /f "delims==" %%j in ('set !$random!$$') do ( set /a n+=1 set $$!n!$!random!=!%%j! ) set n= ) >"%out%" ( for /f "tokens=2 delims==" %%i in ('set $$') do ( echo %%i ) ) ) popd |
Отправлено: 15:57, 26-02-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 40
|
Профиль | Отправить PM | Цитировать Что-то не так. Пробовал и чистый Ваш вариант и меняя
Выдает Цитата:
Цитата Elven:
@echo off setlocal enabledelayedexpansion >nul chcp 1251 set "src=E:\MIX\MUSIC" set "dest=E:\MIX\MPL" set "files=*.mp3" set "playlistext=.alb" 2>nul (md "%dest%" for /f "delims=" %%i in ('dir/ad/b "%src%"') do >"%dest%\%%i%playlistext%" dir/a-d/b/s "%src%\%%i\%files%") For %%a in (E:\MIX\MPL\*.alb) do md "E:\MIX\MPL\%%~na"& move "%%~a" "E:\MIX\MPL\%%~na" exit /b |
||
Последний раз редактировалось krokradio, 26-02-2016 в 16:16. Причина: Уточнение вопроса Отправлено: 16:09, 26-02-2016 | #3 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать Исправил.
|
Отправлено: 16:36, 26-02-2016 | #4 |
Новый участник Сообщения: 40
|
Профиль | Отправить PM | Цитировать Та же ошибка. И пути похоже наблюдает. У меня сейчас 18 папок и выдает 18 ошибок. Возможно глупость, но не может это быть из-за кодировок?
|
|
Отправлено: 16:47, 26-02-2016 | #5 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата krokradio:
Шаг 1. Попробуйте скрипт @Echo Off cls Set "Where=E:\MIX\MPL" SetLocal EnableExtensions EnableDelayedExpansion FOR /F "usebackq delims=" %%d IN (`Dir "%Where%" /b /A:D 2^>nul`) DO ( If Exist "%Where%\%%d\%%d.alb" Call :Working "%Where%\%%d\%%d.alb" ) GoTo :Eof :Working set "in=%~1" set "out=%~1" Echo %in% Echo %out% Шаг 2. Вместо двух последних строк c Echo добавьте текст своего скрипта начиная с Вашего первого for |
|
------- Последний раз редактировалось megaloman, 27-02-2016 в 05:44. Отправлено: 05:37, 27-02-2016 | #6 |
Новый участник Сообщения: 40
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
![]() Все остальные папки остаются не перемешанными. |
|
Отправлено: 14:02, 27-02-2016 | #7 |
Ветеран Сообщения: 1758
|
krokradio, А что вообще вы хотите получить в итоге?
|
Отправлено: 15:33, 27-02-2016 | #8 |
Новый участник Сообщения: 40
|
Профиль | Отправить PM | Цитировать Цитата krokradio:
E:\MIX\MPL\name01\name01.alb E:\MIX\MPL\name01\name02.alb E:\MIX\MPL\name01\name03.alb и т.д. Это плейлисты, созданные другим скриптом (третий пост темы). В них треки идут по порядку (как лежали в папках при создании плейлистов). Мне нужно все эти плейлисты рандомизировать (перемешать) для дальнейшей их обработки. |
|
Отправлено: 16:01, 27-02-2016 | #9 |
Новый участник Сообщения: 40
|
Профиль | Отправить PM | Цитировать Я пробовал еще такой вариант
@echo off for /f "delims=" %%a in ('dir /a-d /b /s "E:\MIX\MPL\*.alb"') do ( setlocal enabledelayedexpansion for /f "usebackq tokens=1,2*" %%i in ("%%a") do ( set $%%j$!random!=%%i %%j %%k ) for /f "tokens=1,2 delims=$=" %%i in ('set $') do ( if not "%%i"=="!x!" ( set /a m+=1 set x=%%i ) set !m!$!random!=!$%%i$%%j! ) for /l %%i in (1 1 %m%) do ( set $random=!random! for /f "delims==" %%j in ('set %%i$') do ( set !$random!$$!random!=!%%j! ) for /f "delims==" %%j in ('set !$random!$$') do ( set /a n+=1 set $$!n!$!random!=!%%j! ) set n= ) >"%%a" ( for /f "tokens=2 delims==" %%i in ('set $$') do ( echo %%i ) ) ) exit /b ![]() |
Отправлено: 16:18, 27-02-2016 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Запуск пакетного файла от имени администратора | SANIOK_AV | Microsoft Windows 7 | 0 | 15-01-2014 13:07 | |
CMD/BAT - Переменная в батнике, зависимая от имени файла | russur | Скриптовые языки администрирования Windows | 14 | 25-05-2012 20:45 | |
CMD/BAT - [решено] Запуск bat-файла от имени админа.Как сделать каталог этого bat-файла текущим?? | axmed0207 | Скриптовые языки администрирования Windows | 1 | 19-01-2012 06:14 | |
Delphi - Корректировка текстовго файла | Hardip | Программирование и базы данных | 1 | 29-11-2010 20:46 | |
Разное - Как сделать и можно ли что бы не от имени администратора заводить программы | dima1981 | Microsoft Windows 7 | 2 | 07-05-2009 21:28 |
|