|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Создание TXT файла для каждого файла в каталоге ISO и заполнение его по шаблону |
|
|
CMD/BAT - [решено] Создание TXT файла для каждого файла в каталоге ISO и заполнение его по шаблону
|
Новый участник Сообщения: 6 |
Профиль | Отправить PM | Цитировать Привет. Помогите пожалуйста со следующей задачей.
Есть папка ISO, в ней следующие файлы: Dead to Rights Reckoning [2006].iso 90,6 Мб Ultimate Board Game Collection [2007].cso 65,9 Мб Worms - Open Warfare [2006].iso 67,0 Мб Super Stardust Portable [2008].iso 83,3 Мб Star Trek - Tactical Assault [2006].cso 114,2 Мб Необходимо создать скрипт который делает следующее: 1. Сканирует файлы в папке ISO 2. Для каждого найденного файла создает файл формата TXT с его именем и со следующем содержанием: (Объясняю на примере первого файла, указанное в скобках меняется) [Info] EID=gdp# Desc= (Dead to Rights Reckoning [2006] - имя без расширения) Size=(92866 - размер файла в килобайтах) Code=../../ISO Fname=(Dead to Rights Reckoning [2006].iso - имя с расширением) [File] C=http://192.168.1.10/ISO/(Dead%20to%20Rights%20Reckoning%20[2006].iso - имя с %20 вместо пробелов) Итого в начале есть файл Dead to Rights Reckoning [2006].iso размером 90,6 Мб в папке ISO В результате работы скрипта должен появится файл Dead to Rights Reckoning [2006].txt со следующим содержанием: [Info] EID=gdp# Desc=Dead to Rights Reckoning [2006] Size=92866 Code=../../ISO Fname=Dead to Rights Reckoning [2006].iso [File] C=http://192.168.1.10/ISO/Dead%20to%20Rights%20Reckoning%20[2006].iso Заранее спасибо. Уже больше недели пытаюсь решить эту задачу самостоятельно. |
|
Отправлено: 16:57, 03-01-2013 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать @Echo Off SetLocal EnableDelayedExpansion Set folder=E:\Temp 1\ISO For %%a In ("%folder%\*.*") Do ( Set ta=%%~nxa Set sa=%%~za Set /A sa/=1024 (Echo [Info] Echo EID=gdp# Echo Desc=%%~na Echo Size=!sa! Echo Code=../../ISO Echo Fname=%%~nxa Echo [File] Echo C=http://192.168.1.10/ISO/!ta: =%%20!)>"%folder%\%%~na.txt" ) |
Отправлено: 19:12, 03-01-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 263
|
Профиль | Отправить PM | Цитировать а для чего строка
Цитата gora:
с этой строкой файлы размером менее 1 mb отображают размер = 0 |
|
Отправлено: 20:28, 03-01-2013 | #3 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать |
Отправлено: 20:30, 03-01-2013 | #4 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать gora, огромное спасибо.
Скрипт отлично работает. |
|
Отправлено: 20:31, 03-01-2013 | #5 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Привет всем, еще раз.
Помогите пожалуйста модифицировать предыдущий скрипт от gora. Задача немного усложнилась, но идея приблизительно похожая. Задача следующая. Есть папка PSX, в ней подпапка PSX-PSP.PSN.Collection, и в ней подпапки (на примере трех): [PSX-PSP] 2Xtreme (english) [SCUS-94508] [PSX-PSP] A Bug's Life (english) [SCES-01489] [PSX-PSP] Alundra (english) [SLUS-00553] ... В каждой подпапке (первого уровня), вторая подпапка с кодом (который присутствует в имени первой подпапки): SCUS94508 SCES01489 SLUS00553 ... В каждой подпапке (второго уровня) с кодом, три файла (имена файлов не меняются): KEYS.BIN (размер меньше 1Кб) DOCUMENT.DAT (размер 1 - 10Мб) EBOOT.PBP (размер 20 - 2000Мб) Общая структура выглядит следующим образом (на примере трех папок): PSX (главная папка) + PSX-PSP.PSN.Collection (подпапка нулевого уровня) + [PSX-PSP] 2Xtreme (english) [SCUS-94508] (подпапка первого уровня) + SCUS94508 (подпапка второго уровня) - KEYS.BIN (файл) - DOCUMENT.DAT (файл) - EBOOT.PBP (файл) + [PSX-PSP] A Bug's Life (english) [SCES-01489] (подпапка первого уровня) + SCES01489 (подпапка второго уровня) - KEYS.BIN (файл) - DOCUMENT.DAT (файл) - EBOOT.PBP (файл) + [PSX-PSP] Alundra (english) [SLUS-00553] (подпапка первого уровня) + SLUS00553 (подпапка второго уровня) - KEYS.BIN (файл) - DOCUMENT.DAT (файл) - EBOOT.PBP (файл) Необходимо переделать скрипт, что бы он выполнял следующее: 1. Сканировал все подпапки в подпапке нулекого уровня PSX-PSP.PSN.Collection 2. Для каждой подпапки в папке PSX-PSP.PSN.Collection создавал два текстовые файла с именем подпапки второго уровня с расширением XPD, (SCUS94508 и добавлением _1 и _2 к имени, SCUS94508_1.xpd и SCUS94508_2.xpd) следующего содержания: первый файл SCUS94508_1.xpd (в скобках информация которая меняется) [Info] EID=gdp# Desc=[PSX-PSP] 2Xtreme (english) [SCUS-94508] Part 1 (имя подпапки первого уровня [PSX-PSP] 2Xtreme (english) [SCUS-94508] + неизменное Part 1) Size=58067 (размер файла EBOOT.PBP в подпапке второго уровня SCUS94508 в килобайтах) Code=SCUS94508 (имя подпапки второго уровня SCUS94508 без дефиса) NPage=javascript:alert("Please wait for Part 2 to begin downloading.");window.location="http://192.168.1.10/PSX/XPD/SCUS94508_P2.xpd" (имя второго файла SCUS94508_P2.xpd) [File] C=http://192.168.1.10/PSX/PSX-PSP.PSN.Collection/[PSX-PSP]%202Xtreme%20(english)%20[SCUS-94508]/SCUS94508/EBOOT.PBP (подпапка первого уровня/второго уровня/файл EBOOT.PBP, вместо пробела %20) A=http://192.168.1.10/PSX/PSX-PSP.PSN.Collection/[PSX-PSP]%202Xtreme%20(english)%20[SCUS-94508]/SCUS94508/DOCUMENT.DAT (подпапка первого уровня/второго уровня/файл DOCUMENT.DAT, вместо пробела %20) второй файл SCUS94508_2.xpd (в скобках информация которая меняется) [Info] EID=gdp# Desc=[PSX-PSP] 2Xtreme (english) [SCUS-94508] Part 2 (имя подпапки первого уровня [PSX-PSP] 2Xtreme (english) [SCUS-94508] + неизменное Part 2) Size=1 (размер файла KEYS.BIN меньше 1Кб, так что можно просто оставить 1) Code=SCUS94508 (имя подпапки второго уровня SCUS94508 без дефиса) [File] C=http://192.168.1.10/PSX/PSX-PSP.PSN.Collection/[PSX-PSP]%202Xtreme%20(english)%20[SCUS-94508]/SCUS94508/KEYS.BIN (подпапка первого уровня/второго уровня/файл KEYS.BIN, вместо пробела %20) 3. Полученные текстовые файлы SCUS94508_P1.xpd и SCUS94508_P2.xpd необходимо положить в папку PSX/XPD/ с расширением *.xpd Пример: 1. Есть три файла ./PSX/PSX-PSP.PSN.Collection/[PSX-PSP] 2Xtreme (english) [SCUS-94508]/SCUS94508/KEYS.BIN 1,9Мб ./PSX/PSX-PSP.PSN.Collection/[PSX-PSP] 2Xtreme (english) [SCUS-94508]/SCUS94508/DOCUMENT.DAT 59Мб ./PSX/PSX-PSP.PSN.Collection/[PSX-PSP] 2Xtreme (english) [SCUS-94508]/SCUS94508/EBOOT.PBP 0,1Мб 2. После запуска скрипта в папке ./PSX/XPD/ создается два текстовых файла в расширением XPD, SCUS94508_P1.xpd и SCUS94508_P2.xpd 3. Содержимое файла SCUS94508_P1.xpd [Info] EID=gdp# Desc=[PSX-PSP] 2Xtreme (english) [SCUS-94508] Part 1 Size=58067 Code=SCUS94508 NPage=javascript:alert("Please wait for Part 2 to begin downloading.");window.location="http://192.168.1.10/PSX/XPD/SCUS94508_P2.xpd" [File] C=http://192.168.1.10/PSX/PSX-PSP.PSN.Collection/[PSX-PSP]%202Xtreme%20(english)%20[SCUS-94508]/SCUS94508/EBOOT.PBP A=http://192.168.1.10/PSX/PSX-PSP.PSN.Collection/[PSX-PSP]%202Xtreme%20(english)%20[SCUS-94508]/SCUS94508/DOCUMENT.DAT 4. Содержимое файла SCUS94508_P2.xpd [Info] EID=gdp# Desc=[PSX-PSP] 2Xtreme (english) [SCUS-94508] Part 2 Size=1 Code=SCUS94508 [File] C=http://192.168.1.10/PSX/PSX-PSP.PSN.Collection/[PSX-PSP]%202Xtreme%20(english)%20[SCUS-94508]/SCUS94508/KEYS.BIN Спасибо, всем кто сможет мне помочь. Бьюсь над этой задачей спустя несколько часов после вашей помощи в решении предыдущей. |
Последний раз редактировалось onemal, 08-01-2013 в 00:39. Причина: Исправление мелких ошибок в задаче Отправлено: 23:03, 07-01-2013 | #6 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Структура каталога PSX с файлами нулевого размера: https://dl.dropbox.com/u/9572883/PSX_Zero.zip
Пример созданных вручную XPD файлов для первых двух папок https://dl.dropbox.com/u/9572883/XPD_Template.zip |
Последний раз редактировалось onemal, 07-01-2013 в 23:45. Причина: Добавлена ссылка Отправлено: 23:39, 07-01-2013 | #7 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать @Echo Off SetLocal EnableDelayedExpansion Set base=e:\Temp\ Set folder=PSX\PSX-PSP.PSN.Collection Set Outfolder=PSX\XPD Del /Q /F "%base%%Outfolder%\*.*" For /F "delims=" %%a In ('Dir "%base%%folder%" /S /A:-D /B 2^>nul') Do ( If /I "%%~xa"==".PBP" ( Set fa=%%a Set sa=%%~za Set /A sa/=1024 For /F "tokens=1,2 delims=\" %%k In ("!fa:%base%%folder%\=!") Do Set parent1=%%k& Set parent2=%%l If Exist "%base%%Outfolder%\!parent2!_P1.xpd" ( Echo Files "!parent2!_P1.xpd" and "!parent2!_P2.xpd" already exists ) Else ( (Echo [Info] Echo EID=gdp# Echo Desc=!parent1! Part 1 Echo Size=!sa! Echo Code=!parent2! Echo NPage=javascript:alert^("Please wait for Part 2 to begin downloading."^);window.location="http://192.168.1.10/!Outfolder:\=/!/!parent2!_P2.xpd" Echo [File] Echo C=http://192.168.1.10/!folder:\=/!/!parent1: =%%20!/!parent2!/EBOOT.PBP Echo A=http://192.168.1.10/!folder:\=/!/!parent1: =%%20!/!parent2!/DOCUMENT.DAT)>"%base%%Outfolder%\!parent2!_P1.xpd" (Echo [Info] Echo EID=gdp# Echo Desc=!parent1! Part 2 Echo Size=1 Echo Code=!parent2! Echo [File] Echo C=http://192.168.1.10/!folder:\=/!/!parent1: =%%20!/!parent2!/KEYS.BIN)>"%base%%Outfolder%\!parent2!_P2.xpd" ) ) ) Pause Exit |
Последний раз редактировалось gora, 08-01-2013 в 14:50. Причина: экранирование скобок Отправлено: 10:54, 08-01-2013 | #8 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать gora, это одна строка. Простите, буду внимательнее.
Содержимое файла SCUS94508_P1.xpd [Info] EID=gdp# Desc=[PSX-PSP] 2Xtreme (english) [SCUS-94508] Part 1 Size=58067 Code=SCUS94508 NPage=javascript:alert("Please wait for Part 2 to begin downloading.");window.location="http://192.168.1.10/PSX/XPD/SCUS94508_P2.xpd" [File] C=http://192.168.1.10/PSX/PSX-PSP.PSN.Collection/[PSX-PSP]%202Xtreme%20(english)%20[SCUS-94508]/SCUS94508/EBOOT.PBP A=http://192.168.1.10/PSX/PSX-PSP.PSN.Collection/[PSX-PSP]%202Xtreme%20(english)%20[SCUS-94508]/SCUS94508/DOCUMENT.DAT [Info] EID=gdp# Desc=[PSX-PSP] 2Xtreme (english) [SCUS-94508] Part 2 Size=1 Code=SCUS94508 [File] C=http://192.168.1.10/PSX/PSX-PSP.PSN.Collection/[PSX-PSP]%202Xtreme%20(english)%20[SCUS-94508]/SCUS94508/KEYS.BIN @Echo Off SetLocal EnableDelayedExpansion Set base=e:\Temp\ Set folder=PSX\PSX-PSP.PSN.Collection Set Outfolder=PSX\XPD Del /Q /F "%base%%Outfolder%\*.*" For /F "delims=" %%a In ('Dir "%base%%folder%" /S /A:-D /B 2^>nul') Do ( If /I "%%~xa"==".PBP" ( Set fa=%%a Set sa=%%~za Set /A sa/=1024 For /F "tokens=1,2 delims=\" %%k In ("!fa:%base%%folder%\=!") Do Set parent1=%%k& Set parent2=%%l If Exist "%base%%Outfolder%\!parent2!_P1.xpd" ( Echo Files "!parent2!_P1.xpd" and "!parent2!_P2.xpd" already exists ) Else ( (Echo [Info] Echo EID=gdp# Echo Desc=!parent1! Part 1 Echo Size=!sa! Echo Code=!parent2! Echo NPage=javascript:alert("Please wait for Part 2 to begin downloading.");window.location="http://192.168.1.10/!Outfolder:\=/!/!parent2!_P2.xpd" Echo [File] Echo C=http://192.168.1.10/!folder:\=/!/!parent1: =%%20!/!parent2!/EBOOT.PBP Echo A=http://192.168.1.10/!folder:\=/!/!parent1: =%%20!/!parent2!/DOCUMENT.DAT)>"%base%%Outfolder%\!parent2!_P1.xpd" (Echo [Info] Echo EID=gdp# Echo Desc=!parent1! Part 2 Echo Size=1 Echo Code=!parent2! Echo [File] Echo C=http://192.168.1.10/!folder:\=/!/!parent1: =%%20!/!parent2!/KEYS.BIN)>"%base%%Outfolder%\!parent2!_P2.xpd" ) ) ) Pause Может я что-то пропустил? |
Отправлено: 14:41, 08-01-2013 | #9 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата onemal:
Это как раз из-за той непонятной двойной строки. Сначала я ее сделал в две строки вывода, потом увидел у Вас в ручных файлах, что строка таки одна и я ее объединил уже в посте без проверки, а в ней оказались парные круглые скобки без экранирования... PS Не забудьте в строке указать свой путь к расположению папки PSX\... |
|
Отправлено: 14:55, 08-01-2013 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. | OSArev | Скриптовые языки администрирования Windows | 2 | 30-01-2011 11:58 | |
[решено] Заполнение формы на сайте, но с данными из текстового файла | ZeroCrash | AutoIt | 2 | 24-06-2009 11:04 | |
Создание файла *.bat | Balbec | Хочу все знать | 2 | 17-04-2008 20:21 | |
Необходимо добавления файла в папку Appliction Data у каждого пользователя | ForGroin | Microsoft Windows NT/2000/2003 | 5 | 27-08-2007 10:16 | |
[решено] Архивация каждого файла в отдельный архив | vadimiron | Общий по Linux | 10 | 15-08-2007 14:24 |
|