Компьютерный форум 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=340762)

avator@vk 01-06-2019 21:41 2874011

Копирование и удаление файла перетаскиванием.
 
Добрый день всем!
Скажите пожалуйста возможно ли сделать так, что бы при перетаскивании произвольного файла на батник или его ярлык, файл копировался в директорию D:/1/ ,а из текущего местоположения удалялся, при этом другие файлы не удалялись?

Iska 01-06-2019 21:51 2874013

Возможно. И первый же вопрос, который возникает: что делать, если в каталоге назначения окажется файл с тем же именем?

avator@vk 01-06-2019 21:56 2874016

Цитата:

Цитата Iska
Возможно. И первый же вопрос, который возникает: что делать, если в каталоге назначения окажется файл с тем же именем? »

Круто. Заменить.
Там дальше скрипт его заберёт и очистит директорию.

mwz 01-06-2019 21:59 2874018

avator@vk, кстати, всё равно ярлык батника класть — а можно положить вместо него ярлык на D:\1\ и тащить туда файл правой кнопкой мышки, с выбором "Переместить. ;)

avator@vk 01-06-2019 22:05 2874021

Цитата:

Цитата mwz
кстати, всё равно ярлык батника класть — а можно положить вместо него ярлык на D:\1\ и тащить туда файл правой кнопкой мышки, с выбором "Переместить. »

Я думал об этом, мне ещё скрипт надо запустить. Не так красиво будет.
А так взял файлик "бросил" в "черную дыру" и он улетел по smtp и следов от него нет )

Iska 01-06-2019 22:06 2874022

avator@vk, вот Вам скрипт WSH:
Скрытый текст
Код:

Option Explicit

Const strDestPath = "D:\1"


Dim strSourceFile

Dim objFSO
Dim strContent


If WScript.Arguments.Count = 1 Then
        Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
       
        strSourceFile = objFSO.GetAbsolutePathName(WScript.Arguments.Item(0))
       
        If objFSO.FileExists(strSourceFile) Then
                If objFSO.FolderExists(strDestPath) Then
                        objFSO.CopyFile strSourceFile, strDestPath & "\", True
                       
                        If objFSO.FileExists(objFSO.BuildPath(strDestPath, objFSO.GetFileName(strSourceFile))) Then
                                objFSO.DeleteFile strSourceFile, True
                        Else
                                WScript.Echo "Can't copy source file [" & strSourceFile & "] into destination folder [" & strDestPath & "]."
                                WScript.Quit 3
                        End If
                Else
                        WScript.Echo "Can't find destination folder [" & strDestPath & "]."
                        WScript.Quit 3
                End If
        Else
                WScript.Echo "Can't find source file [" & WScript.Arguments.Item(0) & "]."
                WScript.Quit 2
        End If
       
        Set objFSO = Nothing
Else
        WScript.Echo "Usage: Drag any file on me."
        WScript.Quit 1
End If

WScript.Quit 0


Сохраните приведённый код в файл с расширением .vbs и пользуйте, как планировали.

Update:
Цитата:

Цитата avator@vk
мне ещё скрипт надо запустить. »

Можете совместить.

avator@vk 01-06-2019 22:13 2874025

Да это же чудо! :jump: :pray: Какой вы умный. Спасибо огромное. Как вообще можно за несколько секунд написать так.... Супер.

YuS_2 02-06-2019 09:09 2874042

Раз уж cmd/bat, то недавно было
Модифицируем его немного, для перемещения:
Код:

@echo off
set "folder=d:\1"
if not exist "%folder%" md "%folder%"
for %%i in (%*) do (
        move /y "%%~i" "%folder%"
)

- перемещать можно хоть на сам батник, хоть на ярлык, от этого батника...

megaloman 02-06-2019 11:35 2874052

Паразитирую на решении YuS_2
Код:

@Echo Off
        Set "Folder=Z:\1"

        If Not Exist "%Folder%" Md "%Folder%"

        For %%i In (%*) Do (
                If Not Exist "%%~i\" >nul XCopy /H /R /Y "%%~i" "%Folder%\" &&Del /A "%%~i"
                If Exist "%%~i\"  >nul XCopy /H /R /E /Y  "%%~i\*.*" "%Folder%\%%~nxi\" &&Rd /Q /S "%%~i"
        )
pause
Exit /B

Оправдываюсь:
Моё решение годится для файлов и скрытых, и системных, и только для чтения.
Кроме того, мой код отработает и для папок. Если этого не надо, то выделенную строку удалить.
При этом останется контроль при ошибочном указании папки вместо файла.


Время: 13:25.

Время: 13:25.
© OSzone.net 2001-