YuS_two
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: @echo off echo Старт программы: rem Отметка старта программы в отдельном файле: >startstop_bat.txt echo Start: %date% %time% rem Задаем имя входного файла: set "f_in=test.txt" rem Задаем имя промежуточного файла: set "f_cnvu=test-UTF8.txt" rem Задаем имя файла в конечно кодировке 866: set "f_cnvo=test-866.txt" rem Указывем путь к каталогу, где будут создаваться подпапки: set "dst=c:\TEMP\!11 33\DST1" rem Проверяем существование каталога и если отсутствует, то создаем. if not exist "%dst%\" md "%dst%" if errorlevel 1 echo Error. Невозможно создать каталог %dst%&&pause&&exit echo Добавляем разделители... chcp 65001>nul for /f "delims=" %%m in ('type "%f_in%"') do ( set "st=%%m" setlocal enabledelayedexpansion set "st=!st:~0,60!$!st:~61,68!$!st:~130!" echo !st!>>tmp endlocal ) chcp 866>nul move /y tmp "%f_cnvu%">nul echo Завершено добавление разделителей. echo. rem pause echo. echo Конвертируем кодировку... rem ======= rem Блок перекодировки чистого cmd - при необходимости раскомментировать строки с двоеточиями :: rem Перекодировка работает криво, большая вероятность ошибок в названиях папок... ::chcp 65001>nul ::cmd /d/u/c type "%f_in%">tmp ::chcp 1251>nul ::type tmp>"%f_in%" ::del tmp rem ======= rem Конвертер кодировок из комплекта GnuWin32 http://gnuwin32.sourceforge.net/packages/libiconv.htm rem Скачивать можно без установщика - "Binaries Zip" http://gnuwin32.sourceforge.net/downlinks/libiconv-bin-zip.php iconv -c -s -f UTF-8 -t 866 "%f_cnvu%">"%f_cnvo%" echo Конвертирование завершено. echo. rem pause echo. echo Преобразуем некоторые спецсимволы и создаем дерево каталогов... rem Разделитель $ должен быть указан в delims второго цикла for: for /f "delims=" %%i in ('type "%f_cnvo%"') do ( set "str=%%i" setlocal enabledelayedexpansion set "str=!str:-N=!" set "str=!str:без устан=!" set "str=!str:"=!" set "str=!str::=;!" set "str=!str:$ =$!" set "str=!str:&=_AND_!" for /f "tokens=1,2 delims=$" %%k in ("!str!") do ( endlocal set "mdir=%%l"&&set "name=%%k" setlocal enabledelayedexpansion set "mdir=!mdir:/=\!" set "mdir=!mdir: = !" set "mdir=!dst!\!mdir!" set "name=!name:\=-!" set "name=!name:/=-!" set "name=!name:?=#!" echo !name!|findstr /rc:"\*">nul&&(for /f "tokens=1-5,* delims=*" %%a in ("!name!") do set "name=%%a%%b%%c%%d%%e%%f") call :sp if not exist "!mdir!" md "!mdir!" if errorlevel 2 echo mdir="!mdir!" if not exist "!mdir!\!name!\" md "!mdir!\!name!" if errorlevel 2 echo name="!name!" endlocal ) ) rem Отметка завершения программы в отдельном файле: >>startstop_bat.txt echo Stop: %date% %time% rem Подчищаем за собой: if exist "%f_cnvu%" del "%f_cnvu%" if exist "%f_cnvo%" del "%f_cnvo%" echo. echo Программа завершена. echo. pause&&exit :sp if "!mdir:~-1!"==" " set "mdir=!mdir:~0,-1!" if "!mdir:~-1!"==" " goto sp :sp1 if "!name:~-1!"==" " set "name=!name:~0,-1!" if "!name:~-1!"==" " goto sp1 exit /b |
| Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 21:15 08-09-2016 | Исправлено: YuS_two, 21:19 08-09-2016 |
|