Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Создание TXT файла для каждого файла в каталоге ISO и заполнение его по шаблону

Ответить
Настройки темы
CMD/BAT - [решено] Создание TXT файла для каждого файла в каталоге ISO и заполнение его по шаблону

Новый участник


Сообщения: 6
Благодарности: 0


Конфигурация

Профиль | Отправить 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

 

Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить 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



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для zion87

Старожил


Сообщения: 263
Благодарности: 69

Профиль | Отправить PM | Цитировать


а для чего строка
Цитата gora:
Set /A sa/=1024 »
???
с этой строкой файлы размером менее 1 mb отображают размер = 0

Отправлено: 20:28, 03-01-2013 | #3


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата zion87:
а для чего строка »
Цитата onemal:
размер файла в килобайтах »

Отправлено: 20:30, 03-01-2013 | #4


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


gora, огромное спасибо.
Скрипт отлично работает.

Отправлено: 20:31, 03-01-2013 | #5


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить 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


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить 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
Содержимое файла 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
Пытаюсь заставить работать этот скрипт:
Код: Выделить весь код
@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
И все время получаю:
Код: Выделить весь код
Непредвиденное появление: window.location.
Может я что-то пропустил?

Отправлено: 14:41, 08-01-2013 | #9


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата onemal:
все время получаю: »
Поправил.
Это как раз из-за той непонятной двойной строки. Сначала я ее сделал в две строки вывода, потом увидел у Вас в ручных файлах, что строка таки одна и я ее объединил уже в посте без проверки, а в ней оказались парные круглые скобки без экранирования...

PS Не забудьте в строке
Код: Выделить весь код
Set base=e:\Temp\
указать свой путь к расположению папки PSX\...
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:55, 08-01-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Создание TXT файла для каждого файла в каталоге ISO и заполнение его по шаблону

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход