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

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

kuzmakzrezv1 09-01-2019 16:50 2850915

переименовать файл - имя из буфера
 
Всем привет, ребята если не затруднит.
Нужен скрипт - переименовать файл имя из буфера обмена
Нужен скрипт - создать текстовый файл(txt) имя из буфера обмена

написать самому - nicht wissen

Iska 10-01-2019 06:28 2851092

Цитата:

Цитата kuzmakzrezv1
переименовать файл имя из буфера обмена »

Скрытый текст
Код:

Option Explicit

Dim strClipboardContent
Dim strSourceFile
Dim strDestFile


With WScript.CreateObject("Scripting.FileSystemObject")
        strClipboardContent = Trim(WScript.CreateObject("htmlfile").parentWindow.clipboardData.getData("text"))
        strSourceFile      = .GetAbsolutePathName(strClipboardContent)
       
        If .FileExists(strSourceFile) Then
                strDestFile = Trim(InputBox("Enter new file name", "Enter new file name", strSourceFile))
               
                If Len(strDestFile) > 0 Then
                        If Not StrComp(strSourceFile, strDestFile, vbTextCompare) = 0 Then
                                .MoveFile strSourceFile, strDestFile
                        Else
                                WScript.Echo "Need new name of file."
                                WScript.Quit 3
                        End If
                Else
                        WScript.Echo "User cancel input."
                        WScript.Quit 2
                End If
        Else
                WScript.Echo "Can't determine Clipboard content [" & strClipboardContent & "] as correct name of existing file."
                WScript.Quit 1
        End If
End With

WScript.Quit 0


Цитата:

Цитата kuzmakzrezv1
создать текстовый файл(txt) имя из буфера обмена »

Скрытый текст
Код:

Option Explicit

Dim strClipboardContent
Dim strSourceFile


With WScript.CreateObject("Scripting.FileSystemObject")
        strClipboardContent = Trim(WScript.CreateObject("htmlfile").parentWindow.clipboardData.getData("text"))
       
        If StrComp(.GetExtensionName(strClipboardContent), "txt", vbTextCompare) = 0 Then
                strSourceFile = .GetAbsolutePathName(strClipboardContent)
        Else
                strSourceFile = .GetAbsolutePathName(strClipboardContent & ".txt")
        End If
       
        If Not .FileExists(strSourceFile) Then
                With .CreateTextFile(strSourceFile)
                        .Close
                End With
        Else
                WScript.Echo "Source file [" & strSourceFile & "] already exists."
                WScript.Quit 1
        End If
End With

WScript.Quit 0


Корректность имён особо не проверяется.

kuzmakzrezv1 10-01-2019 09:37 2851114

Спасибо Iska!

- создать текстовый файл - отлично работает,
- переименование пишет: "Can't determine Clipboard content [mainname] as correct name of existing file."

Iska 10-01-2019 12:53 2851135

Цитата:

Цитата kuzmakzrezv1
переименование пишет: "Can't determine Clipboard content [mainname] as correct name of existing file." »

kuzmakzrezv1, покажите скриншот, на котором будет видно, что в текущем для скрипта каталоге наличествует файл с именем «mainname».

kuzmakzrezv1 10-01-2019 14:07 2851160

Iska
я бью из контенстного меню - переименовать папку 1, с mainname в буфере:

Iska 10-01-2019 18:07 2851235

Цитата:

Цитата kuzmakzrezv1
я бью из контенстного меню - переименовать папку 1, с mainname в буфере: »

Вот. Начинают всплывать занятные подробности, о которых ни слова не было в техзадании.

В какой раздел реестра и как именно Вы добавляете скрипт в контекстное меню. Показывайте и рассказывайте. Только показывайте не на Радикале. Есть нормальные хостинги для изображений. Я пользую Imgur.

kuzmakzrezv1 10-01-2019 19:01 2851252

реестр:

HKEY_CLASSES_ROOT\*\shell\newname
HKEY_CLASSES_ROOT\*\shell\newname\command
значение
C:\Users\Valerio\Favorites\script\newname.bat

HKEY_CLASSES_ROOT\Directory\shell\newname
HKEY_CLASSES_ROOT\Directory\shell\newname\command
значение
C:\Users\Valerio\Favorites\script\newname.bat

батник:
@echo off
start /w wscript.exe "C:\Users\Valerio\Favorites\script\newname.vbs"

батник и скрипт лежат:
C:\Users\Valerio\Favorites\script\

kuzmakzrezv1 10-01-2019 19:17 2851255


и

Iska 10-01-2019 19:50 2851266

kuzmakzrezv1, я про скрипт для переименования.

Впрочем, скажу и про NewName. Исключите пакетный файл совсем, он здесь лишний. Используйте просто «wscript.exe "C:\Users\Valerio\Favorites\script\newname.vbs"».

kuzmakzrezv1 10-01-2019 19:59 2851268

Iska,
NewName - у меня переименование

Цитата:

Цитата Iska
Используйте просто «wscript.exe "C:\Users\Valerio\Favorites\script\newname.vbs"». »

-понял, спасибо

Iska 11-01-2019 05:35 2851353

Цитата:

Цитата kuzmakzrezv1
NewName - у меня переименование »

Оригинально. Для меня NewName — создание :).

Примерно так:
C:\Мои проекты\0236\ReNameByClipboard.vbs
Код:

Option Explicit

Dim strSourceObject
Dim strSourceFolder
Dim strSourceFile

Dim strClipboardContent

Dim strDestObject


If WScript.Arguments.Count = 1 Then
        With WScript.CreateObject("Scripting.FileSystemObject")
                strSourceObject = .GetAbsolutePathName(WScript.Arguments.Item(0))
               
                If .FolderExists(strSourceObject) Then
                        strSourceFolder = strSourceObject
                       
                        strClipboardContent = Trim(WScript.CreateObject("htmlfile").parentWindow.clipboardData.getData("text"))
                        strDestObject      = Trim(InputBox("Enter new name for folder [" & strSourceFolder & "]:", "Enter new name for folder", strClipboardContent))
                       
                        If Len(strDestObject) > 0 Then
                                If Not StrComp(strSourceFolder, strDestObject, vbTextCompare) = 0 Then
                                        .MoveFolder strSourceFolder, strDestObject
                                Else
                                        WScript.Echo "Need new name of folder."
                                        WScript.Quit 4
                                End If
                        Else
                                WScript.Echo "User cancel input."
                                WScript.Quit 3
                        End If
                ElseIf .FileExists(strSourceObject) Then
                        strSourceFile = strSourceObject
                       
                        strClipboardContent = Trim(WScript.CreateObject("htmlfile").parentWindow.clipboardData.getData("text"))
                        strDestObject      = Trim(InputBox("Enter new name for file [" & strSourceFile & "]:", "Enter new name for file", strClipboardContent))
                       
                        If Len(strDestObject) > 0 Then
                                If Not StrComp(strSourceFile, strDestObject, vbTextCompare) = 0 Then
                                        .MoveFile strSourceFile, strDestObject
                                Else
                                        WScript.Echo "Need new name of file."
                                        WScript.Quit 4
                                End If
                        Else
                                WScript.Echo "User cancel input."
                                WScript.Quit 3
                        End If
                Else
                        WScript.Echo "Can't find source file system object [" & WScript.Arguments.Item(0) & "]."
                        WScript.Quit 2
                End If
        End With
Else
        WScript.Echo "Usage: wscript.exe """ & WScript.ScriptName & """ <Source file system object>"
        WScript.Quit 1
End If

WScript.Quit 0

ReNameByClipboard.reg
Код:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\ReNameByClipboard]
@="Переименовать из Бу&фера обмена"

[HKEY_CLASSES_ROOT\*\shell\ReNameByClipboard\command]
@="wscript.exe \"C:\\Мои проекты\\0236\\ReNameByClipboard.vbs\" \"%1\""

[HKEY_CLASSES_ROOT\Directory\shell\ReNameByClipboard]
@="Переименовать из Бу&фера обмена"

[HKEY_CLASSES_ROOT\Directory\shell\ReNameByClipboard\command]
@="wscript.exe \"C:\\Мои проекты\\0236\\ReNameByClipboard.vbs\" \"%1\""


Путь к файлу скрипта в файле реестра Вы, естественно, указываете свой.

kuzmakzrezv1 11-01-2019 08:10 2851362

Iska,


и

, что то не работает..
-не думал, что все так сложно, может ну ее нафиг и так Вас оторвал от дел..

Iska 11-01-2019 12:41 2851399

kuzmakzrezv1, а теперь сравните:
Скрытый текст

Обратный слэш является экранирующим символом для значений параметров файла реестра (и, например, используется для экранирования кавычек), посему его надо тоже экранировать, т.е., там где должен быть один обратный слэш — писать надо два.

kuzmakzrezv1 11-01-2019 13:42 2851408

Iska,
исправил слэши -не работает, создал каталоги как у Вас -не работает

Скрытый текст

kuzmakzrezv1 11-01-2019 16:03 2851423

Iska,
убрал слэши- wscript.exe "C:\Мои проекты\0236\ReNameByClipboard.vbs" "%1"
при переименовании выскакивает окно, нажимаешь ОК, еще окно -ОК и переименование происходит
Скрытый текст

и
Скрытый текст


хз, как избавиться от этих окон..

Iska 13-01-2019 13:51 2851828

Цитата:

Цитата kuzmakzrezv1
исправил слэши -не работает, »

Ухххх… Исправлять нужно было в файле реестра. В файле ReNameByClipboard.reg. А не в редакторе реестра.

Цитата:

Цитата kuzmakzrezv1
убрал слэши- wscript.exe "C:\Мои проекты\0236\ReNameByClipboard.vbs" "%1" »

Хорошо. Надеюсь, разобрались: при редактировании файла реестра используем экранирование, при прямом редактировании параметров реестра редактором реестра — не используем.

Цитата:

Цитата kuzmakzrezv1
при переименовании выскакивает окно, нажимаешь ОК, »

Одно окно должно быть — с содержимым буфера обмена, предлагаемым в качестве нового имени файла или папки.

Цитата:

Цитата kuzmakzrezv1
еще окно -ОК »

Какое на этот раз?

Цитата:

Цитата kuzmakzrezv1
и переименование происходит »

Так и должно быть.

Цитата:

Цитата kuzmakzrezv1
и
»

А вот это окно должно появляться, если Вы нажмёте Cancel в запросе «Enter new name for folder» или оставите/сделаете поле ввода пустым.

kuzmakzrezv1 13-01-2019 14:43 2851836

Iska,
все понял, спасибо за труды Ваши.

Iska 13-01-2019 14:53 2851838

kuzmakzrezv1, так работает у Вас, али нет?!

kuzmakzrezv1 13-01-2019 15:31 2851848

Iska,
да работает, окно тока напрягает..

Iska 13-01-2019 17:54 2851881

Цитата:

Цитата kuzmakzrezv1
да работает, окно тока напрягает.. »

Какое? Запишите видео, как у Вас работает — от помещения текста в буфер обмена до окончания переименования.

kuzmakzrezv1 13-01-2019 18:49 2851892

Iska,

Скрытый текст

Iska 13-01-2019 18:55 2851898

kuzmakzrezv1, так какое окно Вам не нравится? Само окно запроса на подтверждение переименования? Хотите, чтобы это происходило молча?

kuzmakzrezv1 13-01-2019 18:59 2851902

Iska,
Цитата:

Хотите, чтобы это происходило молча?
да

Iska 13-01-2019 19:12 2851908

Попробуйте так (не проверялось):
Скрытый текст
Код:

Option Explicit

Dim strSourceObject
Dim strSourceFolder
Dim strSourceFile

Dim strDestObject


If WScript.Arguments.Count = 1 Then
        With WScript.CreateObject("Scripting.FileSystemObject")
                strSourceObject = .GetAbsolutePathName(WScript.Arguments.Item(0))
               
                If .FolderExists(strSourceObject) Then
                        strSourceFolder = strSourceObject
                       
                        strDestObject = Trim(WScript.CreateObject("htmlfile").parentWindow.clipboardData.getData("text"))
                       
                        If Len(strDestObject) > 0 Then
                                If Not StrComp(strSourceFolder, strDestObject, vbTextCompare) = 0 Then
                                        .MoveFolder strSourceFolder, strDestObject
                                Else
                                        WScript.Echo "Need new name of folder."
                                        WScript.Quit 4
                                End If
                        Else
                                WScript.Echo "User cancel input."
                                WScript.Quit 3
                        End If
                ElseIf .FileExists(strSourceObject) Then
                        strSourceFile = strSourceObject
                       
                        strDestObject = Trim(WScript.CreateObject("htmlfile").parentWindow.clipboardData.getData("text"))
                       
                        If Len(strDestObject) > 0 Then
                                If Not StrComp(strSourceFile, strDestObject, vbTextCompare) = 0 Then
                                        .MoveFile strSourceFile, strDestObject
                                Else
                                        WScript.Echo "Need new name of file."
                                        WScript.Quit 4
                                End If
                        Else
                                WScript.Echo "User cancel input."
                                WScript.Quit 3
                        End If
                Else
                        WScript.Echo "Can't find source file system object [" & WScript.Arguments.Item(0) & "]."
                        WScript.Quit 2
                End If
        End With
Else
        WScript.Echo "Usage: wscript.exe """ & WScript.ScriptName & """ <Source file system object>"
        WScript.Quit 1
End If

WScript.Quit 0


kuzmakzrezv1 13-01-2019 19:24 2851915

Iska,
ВСЕ РАБОТАЕТ, БОЛЬШОЕ СПАСИБО!


Время: 00:47.

Время: 00:47.
© OSzone.net 2001-