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

A.N.D.R.E.I.S.M 18-11-2018 17:42 2841341

Копия файлов в указанную папку на флешке
 
Здравтсвуйте форумчане))
Помогите пожалуйста своими дарами. У меня есть вот такой скриптик:

Цитата:

@echo off

for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (

if %%l equ 2 (
xcopy /s "%userprofile%\Downloads\copy.txt" %%i\
)
)
Всё копирует отлично в корень флешки, а в указанную папку не выходит ни как, точнее в этом коде не указано копия в указанную папку на флешке.
Помогите пожалуйста до делать этот код, чтоб копировала в указаную папку на ФЛЕШКЕ.

Iska 18-11-2018 17:58 2841343

Цитата:

Цитата A.N.D.R.E.I.S.M
а в указанную папку не выходит ни как, »

А как Вы указывали «указанную папку»?

A.N.D.R.E.I.S.M 18-11-2018 18:07 2841344

Iska, Приветсвую вас))
Автоматически копирует из указанной папки по пути"%userprofile%\Downloads\copy.txt" на флешку. А вот чтоб скопировать на флешку в указанную папку, не могу ни как((

Iska 18-11-2018 19:31 2841360

A.N.D.R.E.I.S.M, ещё раз — Вы пишете:
Цитата:

Цитата A.N.D.R.E.I.S.M
а в указанную папку не выходит ни как »

Так я спрашиваю — как именно Вы пытались сделать?

A.N.D.R.E.I.S.M 18-11-2018 19:36 2841361

Iska, Вот так пробовал - if %%l equ 2 ( \Folder

megaloman 19-11-2018 10:18 2841426

Код:

@Echo Off
cls
Set "FileOut=Z:\Box_In\Мой контент\Книги\djvu\Windows Servrt 2012 полное руководство.djvu"
Set "OutDir=Папка на флешке"

FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk get caption,drivetype"`) DO (
        If "%%j"=="2" Xcopy "%FileOut%" "%%i\%OutDir%\" >nul
)
pause


A.N.D.R.E.I.S.M 19-11-2018 11:04 2841435

megaloman, День Добрый, РАБОТАЕТ))
Спасибо большущие вам, что помогли мне разобратся. То-что нужно мне)

Iska 19-11-2018 17:46 2841509

Ну, пусть будет до кучи и WSH:

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

Option Explicit

Dim strSourceFileName
Dim strSourceFile
Dim strDestPath

Dim objFolder
Dim objDrive

Dim strDestFolder


strSourceFileName = "copy.txt"
strDestPath      = "Sample folder"

Set objFolder = WScript.CreateObject("Shell.Application").NameSpace("shell:Downloads")

If objFolder Is Nothing Then
        WScript.Echo "Can't determine source folder."
        WScript.Quit 1
End If

With WScript.CreateObject("Scripting.FileSystemObject")
        strSourceFile = .BuildPath(objFolder.self.Path, strSourceFileName)
       
        If .FileExists(strSourceFile) Then
                For Each objDrive In .Drives
                        If objDrive.DriveType = 1 And objDrive.IsReady Then
                                strDestFolder = .BuildPath(objDrive.RootFolder.Path, strDestPath)
                               
                                If .FolderExists(strDestFolder) Then
                                        .CopyFile strSourceFile, strDestFolder & "\", True
                                       
                                        Exit For
                                End If
                        End If
                Next
        Else
                WScript.Echo "Can't find source file [" & strSourceFile & "]."
                WScript.Quit 2
        End If
       
        Set objFolder = Nothing
End With

WScript.Quit 0


alpap 19-11-2018 20:04 2841547

а чего в wmic сразу не указать тип диска?
Код:

@echo off
set "in=C:\In"
set "out=Out"

for /f %%a in ('"wmic path Win32_LogicalDisk where (drivetype="2" and mediatype=null) get name|find ":""') do >nul xcopy "%in%" "%%a\%out%"
pause


A.N.D.R.E.I.S.M 21-11-2018 08:29 2841814

Доброе утро.
megaloman, Здравствуйте, а можно еще добавить команду, создать папку на флешке?
Нашел одну проблему, все что в папке копирует с диска C:\Folder\Word.txt, а вот подкаталоги C:\Folder не хочет чего-то копировать((
Цитата:

@Echo Off
cls
Set "FileOut=Z:\Box_In\Мой контент\Книги\djvu\Windows Servrt 2012 полное руководство.djvu"
Set "OutDir=Папка на флешке"

FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk get caption,drivetype"`) DO (
If "%%j"=="2" Xcopy "%FileOut%" "%%i\%OutDir%\" >nul
)
pause
Iska, Спасибо большущие вам в помощи)
alpap, Здравствуйте, вот такой тип указать?
Цитата:

'USB%'"

alpap 21-11-2018 14:15 2841885

Цитата:

Цитата A.N.D.R.E.I.S.M
вот такой тип указать? »

я уже указал его в коде, код полностью соответствует задаче
Цитата:

Цитата alpap
drivetype="2" »


alpap 21-11-2018 14:43 2841894

A.N.D.R.E.I.S.M,
если надо папку копировать, добавьте ключ /i:
Код:

>nul xcopy /i "%in%" "%%a\%out%"

A.N.D.R.E.I.S.M 21-11-2018 14:51 2841897

megaloman, Перепутал чуть-чуть, извините, всю папку с файлами и подкаталогами. Но прежде чем скапировать нужно создать папку на самой флешке
alpap, Спасибо буду пробовать

A.N.D.R.E.I.S.M 21-11-2018 15:13 2841901

megaloman, Это как пример написал, что в папке есть файлы с разришением .txt, мне нужно скопировать папку с диска C:\Folder- с подпапками / Создать на флешке папку, и скопировать всё в папку и ВСЁ))
Цитата:

1. C:\Folder\Word.txt - это файл или папка?
alpap, Что, я не так делаю:
Цитата:

@echo off
set "in=C:\Users\Zexs\Book" - Копия с диска
set "out=book " - копия на флешку
for /f %%a in ('"wmic path Win32_LogicalDisk where (drivetype="2" and mediatype=null) get name|find ":""') do >nul xcopy /i "%in%" "%%a\%out%"

megaloman 21-11-2018 15:54 2841913

Цитата:

Цитата A.N.D.R.E.I.S.M
всю папку с файлами и подкаталогами »

Код:

@Echo Off
cls
        Set "DirIn=Z:\Box_In\Мой контент"
        Set "DirOut=Мой контент"

        FOR /F "usebackq tokens=1,2 delims==:" %%i IN (`"wmic logicaldisk where drivetype="2" get caption /VALUE"`) DO (
                If Not "%%j"=="" Xcopy /S "%DirIn%\*.*" "%%j:\%DirOut%\"
        )
Pause
GoTo :Eof


alpap 21-11-2018 17:32 2841933

Цитата:

Цитата A.N.D.R.E.I.S.M
Что, я не так делаю: »

все так, только убрать из переменных комментарий: - Копия с диска и - копия на флешку
и папка: "C:\Users\Zexs\Book" должна быть не пуста.

еще есть опечатка, лишний пробел после имени папки в значении переменной out:
set "out=book "
надо:
set "out=book"
иначе не найдет путь

A.N.D.R.E.I.S.M 21-11-2018 22:49 2841980

megaloman, alpap, Спасибо большущие при большущие вам ГОСПОДА, вы просто СУПЕР)) Выручили меня, всё работает отлично вот по этому скрипту:
Цитата:

@Echo Off
cls
Set "DirIn=Z:\Box_In\Мой контент"
Set "DirOut=Мой контент"

FOR /F "usebackq tokens=1,2 delims==:" %%i IN (`"wmic logicaldisk where drivetype="2" get caption /VALUE"`) DO (
If Not "%%j"=="" Xcopy /S "%DirIn%\*.*" "%%j:\%DirOut%\"
)
Pause
GoTo :Eof
Другие коды себе в библиотеку придержу, очень полезная и годная тема.

megaloman 23-11-2018 11:41 2842244

A.N.D.R.E.I.S.M,
Если надо удалить папку перед копированием на флешку.
Код:

@Echo Off
cls
        Set "DirIn=Z:\Box_In\Мой контент"
        Set "DirOut=Тра ля ля"

        FOR /F "usebackq tokens=1,2 delims==:" %%i IN (`"wmic logicaldisk where drivetype="2" get caption /VALUE"`) DO (
                If Not "%%j"=="" (
                        If Exist "%%j:\%DirOut%\" Rd /S /Q "%%j:\%DirOut%"
                        Xcopy /S "%DirIn%\*.*" "%%j:\%DirOut%\"
                )
        )
Pause
GoTo :Eof


megaloman 15-12-2018 16:08 2846173

A.N.D.R.E.I.S.M,
Цитата:

Цитата A.N.D.R.E.I.S.M (из PM)
Не копирует и хоть убей, на флешки идет копия на вешние диски не хочет. Что можно в коде подправить чтоб, как на флешки копировались файлы, так и на внешние диски?

Если жесткие диски на компьютере именуются вподряд (C: D: E: и т д без "дырок" в последовательности жестких дисков), то вот скрипт, который будет работать с флэшкой (если она есть) или с внешним диском (если флэшки нет), или на последний жесткий диск компьютера, если нет ни флешки, ни внешнего диска
Код:

@Echo Off
cls
        Set "DirIn=Z:\Box_In\Не Мой контент"
        Set "DirOut=Тра ля ля"

        FOR /F "usebackq tokens=1,2 delims==:" %%i IN (`"wmic logicaldisk where 'drivetype="2" or drivetype="3"' get caption /VALUE"`) DO (
                If Not "%%j"=="" Set "Letter=%%j"
        )
        If Exist "%Letter%:\%DirOut%\" Rd /S /Q "%Letter%:\%DirOut%"
        Xcopy /S "%DirIn%\*.*" "%Letter%:\%DirOut%\"
Pause

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

Iska 15-12-2018 16:39 2846181

Цитата:

Цитата megaloman
Вся сложность в том, что нет признака, отличающего внутренний и внешний жесткие диски »

Свойство MediaType класса Win32_DiskDrive:

wmic.exe DiskDrive get Caption, MediaType
Код:

Caption                              MediaType
ST500DM0 02-1SB10A SCSI Disk Device  Fixed hard disk media
Kingston DataTraveler 3.0 USB Device  Removable Media
WD My Passport 0832 USB Device        External hard disk media


Другое дело, что задачка эта явно не для пакетных файлов — надо цепь ассоциаций выстраивать от Win32_DiskDrive через Win32_DiskPartition к Win32_LogicalDisk.

megaloman 15-12-2018 18:06 2846215

A.N.D.R.E.I.S.M,
Как вариант, при отсутствии флэшки будет выдано меню на выбор диска
Код:

@Echo Off
cls
        Set "DirIn=Z:\Box_In\Не Мой контент"
        Set "DirOut=Тра ля ля"

        Set "DriveName="
        FOR /F "usebackq tokens=1,2 delims==:" %%i IN (`"2^>nul wmic logicaldisk where drivetype="2" get caption /VALUE"`) DO (
                If Not "%%j"=="" Set "DriveName=%%j"
        )

        If Not "%DriveName%"=="" GoTo :MyCopy
        Set /A N=0
        Set "Spisok=0"
        Set "Element=0(нуль)=Выход"
        Call :Description

        Echo ===== Выберите диск для копирования
        FOR /F "usebackq Skip=1 tokens=1,2,3 delims=: " %%i IN (`"wmic logicaldisk where 'drivetype="2" or drivetype="3"' get caption,drivetype,name"`) DO (
                If Not "%%j"=="" Call :Menu "%%i" "%%i: %%A%%j%%" 
        )
        If N==0 Exit /B 1

        CHOICE /C %Spisok%  /M "%Element%"
        If %ErrorLevel% EQU 1 Exit B 0
        Set /A DriveName=%ErrorLevel%-1
        Call Set "DriveName=%%Disk%DriveName%%%"

        :MyCopy
        If Exist "%DriveName%:\%DirOut%\" Rd /S /Q "%DriveName%:\%DirOut%"
        Xcopy /S /y "%DirIn%\*.*" "%DriveName%:\%DirOut%\"
Pause
GoTo :Eof

:Description
        Set "A0=0 - Unknown"
        Set "A1=1 - No Root Directory"                                                                                %
        Set "A2=2 - сменный диск"
        Set "A3=3 - жесткий диск"
        Set "A4=4 - сетевой диск"
        Set "A5=5 - CD-ROM"
        Set "A6=6 - RAM диск"
GoTo :Eof

:Menu
        Echo %~2
        Set /A N+=1
        Set "Disk%N%=%~1"
        Set "Spisok=%Spisok%%~1"
GoTo :Eof


alpap 15-12-2018 20:46 2846247

Цитата A.N.D.R.E.I.S.M (из PM):
Цитата:

Цитата megaloman
на флешки идет копия на вешние диски не хочет »

если поизвращаться (видимо для себя разве)
посмотреть первым или последним будет внешний диск в списке (так как не только он так определится)
Код:

>spisok.txt (for /f "delims=" %%a in ('"wmic logicaldisk get Name,Description,DriveType,MediaType /value"') do @echo:%%a)
если нужен первый такой из списка:
Код:

@echo off
set "In=C:\in"
set "Out=C:\out"
set "name="
 
for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "DriveType=3 and MediaType=12" get Name /value^|find "="') do if not defined name set "name=%%a"
if exist "%name%\%Out%" echo Вот нужный путь: "%name%\%Out%"
pause

если нужен последний такой из списка:
Код:

@echo off
set "In=C:\in"
set "Out=C:\out"
 
for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "DriveType=3 and MediaType=12" get Name /value^|find "="') do set "name=%%a"
if exist "%name%\%Out%" echo Вот нужный путь: "%name%\%Out%"
pause



Время: 06:03.

Время: 06:03.
© OSzone.net 2001-