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

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

onemal 03-01-2013 16:57 2058196

Создание TXT файла для каждого файла в каталоге ISO и заполнение его по шаблону
 
Привет. Помогите пожалуйста со следующей задачей.
Есть папка 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

Заранее спасибо.
Уже больше недели пытаюсь решить эту задачу самостоятельно.

gora 03-01-2013 19:12 2058273

Код:

@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"
)


zion87 03-01-2013 20:28 2058348

а для чего строка
Цитата:

Цитата gora
Set /A sa/=1024 »

???
с этой строкой файлы размером менее 1 mb отображают размер = 0

gora 03-01-2013 20:30 2058350

Цитата:

Цитата zion87
а для чего строка »

Цитата:

Цитата onemal
размер файла в килобайтах »


onemal 03-01-2013 20:31 2058353

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

onemal 07-01-2013 23:03 2061431

Привет всем, еще раз.
Помогите пожалуйста модифицировать предыдущий скрипт от 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 07-01-2013 23:39 2061464

Структура каталога PSX с файлами нулевого размера: https://dl.dropbox.com/u/9572883/PSX_Zero.zip
Пример созданных вручную XPD файлов для первых двух папок https://dl.dropbox.com/u/9572883/XPD_Template.zip

gora 08-01-2013 10:54 2061661

Код:

@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


onemal 08-01-2013 14:41 2061787

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.
Может я что-то пропустил?

gora 08-01-2013 14:55 2061797

Цитата:

Цитата onemal
все время получаю: »

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

PS Не забудьте в строке
Код:

Set base=e:\Temp\
указать свой путь к расположению папки PSX\...

onemal 08-01-2013 15:25 2061817

gora, с Set base=e:\Temp\ в первую очередь разобрался.
Исправленный скрипт теперь отлично работает.
Спасибо вам еще раз огромное.

serezhapotapenko1980 09-05-2017 11:10 2735308

@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"
)

Привет всем! может кто помочь?
Вопрос такой что в коде изменить чтобы он работал на весь диск а не на конкретную папку?
Просто у меня есть много архивов RAR в разных папках на дисках D и E хочу к ним этот код применить, но чот не могу разобраться( помогите пожалуйста. Заранее очень благодарен!

а и еще забыл) что дописать туда чтобы в конечном файле txt показывалась строчка атрибут файла (для чтения, архивный, скрытый и т.д. ...)? тоесть с каким атрибутом был файл.

serezhapotapenko1980 09-05-2017 20:42 2735460

форум еще живет? есть тут кто?)

Iska 10-05-2017 03:50 2735528

serezhapotapenko1980, начните со словесного описания того, что Вам нужно.

serezhapotapenko1980 10-05-2017 17:44 2735680

@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"
)

Привет всем! может кто помочь?
Вопрос такой что в коде изменить чтобы он работал на весь диск а не на конкретную папку?
Просто у меня есть много архивов RAR в разных папках на дисках D и E хочу к ним этот код применить, но чот не могу разобраться( помогите пожалуйста. Заранее очень благодарен!

а и еще забыл) что дописать туда чтобы в конечном файле txt показывалась строчка атрибут файла (для чтения, архивный, скрытый и т.д. ...)? тоесть с каким атрибутом был файл.

Iska 10-05-2017 18:40 2735691

serezhapotapenko1980, копипаст с предыдущего сообщения Вы освоили. Но этого недостаточно.

serezhapotapenko1980 10-05-2017 22:28 2735739

код создает txt файл с разными параметрами файлов в конкретной папке.
а я хотел применить этот код к архивам rar но они расположены в разных папках по всему диску, как это реализовать?

serezhapotapenko1980 12-05-2017 17:58 2736196

нереально такое сделать как я описал?

alpap 12-05-2017 22:59 2736247

допустим
Код:

@echo off
for /f "delims=" %%A in ('dir /ad/b/s "D:\*" "E:\*"') do (
 pushd "%%A"
  for /f "delims=" %%a in ('dir /a-d/b "*.rar"') do (
  echo %%~dpa
  echo %%~na
  echo %%~xa
  echo %%~za
  echo %%~aa
  )
 popd
)
pause


Iska 12-05-2017 23:12 2736253

Цитата:

Цитата serezhapotapenko1980
нереально такое сделать как я описал? »

Вы не описали.

serezhapotapenko1980 13-05-2017 08:35 2736309

Цитата:

Цитата alpap
допустим
Код: Выделить весь код
@echo off
for /f "delims=" %%A in ('dir /ad/b/s "D:\*" "E:\*"') do (
pushd "%%A"
for /f "delims=" %%a in ('dir /a-d/b "*.rar"') do (
echo %%~dpa
echo %%~na
echo %%~xa
echo %%~za
echo %%~aa
)
popd
)
pause »

Спасибо вроде разобрался. Еще вопросик возник сейчас код работает но только на rar файлы которые находятся в папках и в подпапках а те файлы которые находятся в корне диска например D:\23042017.rar на них код не реагирует как это поправить?

alpap 13-05-2017 14:28 2736383

Код:

@echo off
for /f "delims=" %%a in ('2^>nul dir /a-d/b/s "D:\*.rar" "F:\*.rar"') do (
 >>list.txt (
  echo %%~dpa
  echo %%~na
  echo %%~xa
  echo %%~za
  echo %%~aa
 )
)
pause


serezhapotapenko1980 13-05-2017 15:14 2736393

Цитата:

Цитата alpap
@echo off for /f "delims=" %%a in ('2^>nul dir /a-d/b/s "D:\*.rar" "F:\*.rar"') do ( >>list.txt ( echo %%~dpa echo %%~na echo %%~xa echo %%~za echo %%~aa ) ) pause »

извините наверно надоел) но этот код создает один txt для всех файлов. а мне надо чтобы txt создавался для каждого файла с именем самого файла.

вот этот код работал как надо но только не захватывал файлы из корня диска а только из папок и подпапок.
@echo off
for /f "delims=" %%A in ('dir /ad/b/s "D:\*" "E:\*"') do (
pushd "%%A"
for /f "delims=" %%a in ('dir /a-d/b "*.rar"') do (
echo %%~dpa
echo %%~na
echo %%~xa
echo %%~za
echo %%~aa>D:\File\%%~na.txt
)
popd
)
pause

alpap 13-05-2017 15:35 2736401

Код:

@echo off
for /f "delims=" %%a in ('dir /a-d/b/s "D:\*.rar" "F:\*.rar"') do call :# "%%a"
pause& exit

:#
 >%~dp1%~n1.log (
  echo %~dp1
  echo %~n1
  echo %~x1
  echo %~z1
  echo %~a1
 )
exit /b



Время: 16:40.

Время: 16:40.
© OSzone.net 2001-2025