Страница 1 из 3

Создание файла с содержимым на основе имени другого файла

Добавлено: Вт июн 21, 2011 22:53
KrechetovRS
День добрый, у меня стоит такая задача:
Необходим скрипт, который при запуске использует имя файла под курсором (выделяется только один файл) и при запуске создает другой файл с заданным расширением и параметрическим текстом (весьма коротким). Надо это для оформление каталога для сетевого проигрывателя.

В программировании я, к сожалению, не очень силен, буду рад помощи.

[mod="Моторокер"]Простой вопрос по созданию файла
Тема переименована на основании п.6 правил.[/mod]

Добавлено: Ср июн 22, 2011 00:15
Rodny
Откуда берётся текст?
И где задавать имя, расширение и путь создания файла? Параметрами кнопки?

Добавлено: Ср июн 22, 2011 00:18
Batya
KrechetovRS
Если кодировка не имеет значения, то можно обойтись кнопкой, создающий файл в кодировке DOS:

Код: Выделить всё

TOTALCMD#BAR#DATA
cmd /c echo
Весьма короткий текст>%O.txt
shell32.dll,114
Текст в файл

1
-1

Добавлено: Чт июн 23, 2011 22:07
KrechetovRS
Спасибо за ответ, вопрос был поставлен по идиотски.
Более понятное описание задачи:
1. есть файл "А в этой сказке было так… (1984).mkv"
абсолютный путь к файлу: "\\192.168.0.9\Public\Мультфильмы\СССР\!А-Д\А в этой сказке было так… (1984).mkv"
2. когда на нем курсор и запускаем скрипт, результатом хотелось бы получить файл "А в этой сказке было так… (1984).m3u" с текстом внутри: "nfs://192.168.0.9:/Public/Мультфильмы/СССР/!А-Д/А в этой сказке было так… (1984).mkv"

абсолютной путь получен при помощи скрипта "Копировать имена файлов с UNC-путями" в Total Commander. Можно, конечно все руками сделать, но честно лень менять прямой слеш на обратный, т.к. файлов реально много.

Спасибо

Добавлено: Чт июн 23, 2011 23:14
Flasher
Если я правильно понял:

Код: Выделить всё

' Создать файлы с именами выделенных в каталоге сетевого устройства
' файлов, расширением M3U и соответствующим NFS-путём в их содержимом
' Параметры: "Путь назначения>"
' Пример: "%T"
'===========================================
CreateObject("WScript.Shell").Exec("%COMMANDER_PATH%\Utils\TCMC\TCMC.exe CM2021")
  Clip = ""
With CreateObject("InternetExplorer.Application")
  .Navigate("about:blank")
  Clip = Replace(.document.parentWindow.clipboardData.getData("Text"),"","/")
  .Quit
End With
With CreateObject("Scripting.FileSystemObject")
  For Each F In Split(Clip, vbNewLine)
    Set N = .OpenTextFile(WScript.Arguments(0)&.GetBaseName(F)&".m3u",2,True)
    N.WriteLine "nfs:"&F
    N.Close
  Next
End With
Путь к утилите TCMC должен совпадать с приведённым в скрипте.
Если надо, могу поставить условие, чтобы обрабатывались только MKV из всего выделенного.
KrechetovRS писал(а):лень менять прямой слеш на обратный
:? Зачем менять, если указано, что нужен именно прямой в содержимом файла?
KrechetovRS писал(а):при помощи скрипта "Копировать имена файлов с UNC-путями"
Это никакой не скрипт, а обычная внутренняя команда ТС cm_CopyNetNamesToClip.

Добавлено: Сб июн 25, 2011 00:43
KrechetovRS
Спасибо огромное, попробую

Добавлено: Пн июн 27, 2011 00:03
KrechetovRS
М-да попробовал, утилиту скачал, а что дальше то делать?

Добавлено: Пн июн 27, 2011 00:22
Flasher
В каком смысле? Был запрошен скрипт. Я его написал.

Добавлено: Пн июн 27, 2011 09:30
Batya
KrechetovRS
Ещё один вариант vbs-скрипта:

Код: Выделить всё

'=====================================================================
' Формирование для каждого файла из файла-списка m3u-файла,
'   с содержимым вида:
'   "nfs:<//ip-адрес:>|<диск:>/<Путь>/<к файлу>/<из файла-списка>/<имя файла>.<расширение>"
'
' Параметры:
' {файл-список}
'
' Примеры параметров при вызове из TC:
' %L
'=====================================================================
Option Explicit
Dim FSO, F, F1, FF, Str, D, N
Set FSO = CreateObject("Scripting.FileSystemObject")

With FSO.OpenTextFile(WScript.Arguments(0), 1)
  Do While Not .AtEndOfStream
    F = Trim(.ReadLine)
    If F <> "" Then
      If FSO.FileExists(F) Then
        Str = FSO.GetFile(F).Path
        Set D = FSO.GetDrive(FSO.GetDriveName(F))
        N = InStr(Str, ":")
        If (D.DriveType = 3) And (N > 0) Then Str = D.ShareName & Mid(Str, N+1)
        If Left(Str, 2) = "\\" Then
          N   = InStr(3, Str, "\", 1)
          Str = Left(Str, N-1) & ":" & Mid(Str, N)
        End If
        F1 = FSO.GetParentFolderName(F) & "\" & FSO.GetBaseName(F) & ".m3u"
        Set FF = FSO.OpenTextFile(F1, 2, True)
        FF.WriteLine "nfs:" & Replace(Str, "\", "/")
        FF.Close
      End If
    End If
  Loop
  .Close
End With

Set D   = Nothing
Set FF  = Nothing
Set FSO = Nothing
Wscript.Quit()

Добавлено: Пн июн 27, 2011 11:29
Flasher
Batya
%L тут неуместен. Речь идёт об UNC-путях.

Добавлено: Пн июн 27, 2011 12:04
KrechetovRS
Получается не тот текст в файле:
Надо - nfs://192.168.0.9:/Public/Мультфильмы/СССР/!А-Д/А в этой сказке было так… (1984).mkv
Имеем - nfs:Y:/Мультфильмы/СССР/!А-Д/А в этой сказке было так… (1984).mkv

Добавлено: Пн июн 27, 2011 12:06
Flasher
KrechetovRS
Мой скрипт работает?

Добавлено: Пн июн 27, 2011 12:08
KrechetovRS
made by Batya

Добавлено спустя 2 минуты:

to Flasher
твой совсем не работает.
запрашивает доступ к буферу обмена и на этом - все (

Добавлено: Пн июн 27, 2011 12:08
Flasher
KrechetovRS
Прочти снизу этого поста.

Добавлено: Пн июн 27, 2011 12:16
KrechetovRS
Flasher

теперь ничего не происходит