Войти

Показать полную графическую версию : Перенос файлов и папок


iiama
29-05-2018, 07:55
Здравствуйте, помогите пожалуйста написать батник. Необходимо перенести все папки и файлы с рабочего стола (C:\Users\U001\Desktop\) за исключением ярлыков в определенную папку (D:\docs)

chcp 1251
MOVE /Y C:\Users\U001\Desktop\*.* "D:\docs\"

такая команда перемещает ярлыки и не перемещает папки.

Charg
29-05-2018, 09:54
Зачем вообще этот костыль? Если тебе нужно чтобы всё то барахло которые люди хранят на рабочем столе не занимало место на диске С - просто перемести рабочий стол на диск Д. Вот и всё.

megaloman
29-05-2018, 13:38
@Echo Off
cls

Set "Users=C:\Users"
Set "Name=U001"
Set "Desk=Desktop"
Set "Out=D:\Docs"
Set "Exc=.lnk"

If Exist "%Users%\%Name%\%Desk%" Call :Dtop "%Name%" "%Users%\%Name%\%Desk%" "%Out%" "%Exc%"

Pause
GoTo :Eof

:Dtop
Echo %1 %2
Md "%~3_%~1" 2>nul
>%~d3\~Exclude.tmp Echo %~4
FOR /F "usebackq tokens=1,2 delims=>" %%i IN (`"xcopy "%~2\*.*" "%~3_%~1\" /Exclude:%~d3\~Exclude.tmp/E /H /R /F /Y"`) DO (
If Not "%%j"=="" (Set In=%%i &Set Ouf=%%j &Call :InDel "%%In:~0,-3%%" "%%Ouf:~1,-1%%")
)
For /F "usebackq delims=" %%i In (`Dir "%~2\" /B /S /A:D 2^>nul^|Sort /R`) Do 2>nul RD "%%i"
Del %~d3\~Exclude.tmp
Rd "%~3_%~1" 2>nul
GoTo :Eof

:InDel
If Exist %2 Del /A:-L %1
GoTo :Eof
@Echo Off
cls

Set "Users=C:\Users"
Set "Desk=Desktop"
Set "Out=D:\Docs"
Set "Exc=.lnk"

FOR /F "usebackq delims=" %%d IN (`2^>nul Dir /b /A:D "%Users%\"`) DO If Exist "%Users%\%%d\%Desk%" Call :Dtop "%%d" "%Users%\%%d\%Desk%" "%Out%" "%Exc%"

Pause
GoTo :Eof
+ выделенный кусок кода из предыдущего скриптаПримечание: Файлы пользователя будут перенесены в папку с именем пользователя, например: D:\Docs_U001

iiama
30-05-2018, 01:47
Зачем вообще этот костыль? »

Дано: компьютерный класс, пара сотен учащихся, на рабочих столах постоянная помойка. Уровень пользователей: "не могу найти нужный ярлык".

Необходимо: каждый день при включении компьютера, сносить все файлы и папки на диск D. Главная задача — чистый рабочий стол (с нужными ярлыками), экономия места на С — задача второстепенная.

YuS_2
30-05-2018, 06:10
Главная задача — чистый рабочий стол (с нужными ярлыками), экономия места на С — задача второстепенная. »

Для текущего пользователя:
@echo off
set "dst=d:\docs\%username%\desktop"
:loop
if exist "%dst%\" (set "dst=%dst%_"&goto loop)
if not exist "%dst%\" md "%dst%"
for /f "tokens=3*" %%i in ('reg query "hkcu\software\microsoft\windows\currentversion\explorer\user shell folders" /v desktop^|find "desktop"') do set "desktop=%%i"
robocopy "%desktop%" "%dst%" /xf "*.lnk" "*.ini" /s /e /tee /move
pause&exit /b

DJ Mogarych
30-05-2018, 09:27
Powershell:

Move-Item -Path "C:\Users\U001\Desktop\*" -destination "D:\docs" -Exclude "*.lnk"

YuS_2
30-05-2018, 12:59
-Path "C:\Users\U001\Desktop\*" »
тогда уж:
powershell:
$src = [environment]::getfolderpath("desktop")
if (!(test-path ($dst = "d:\docs\$env:username"))){md $dst}
mi "$src\*" $dst -exc '*.lnk' -whatif

но если присутствуют каталоги и вложенные в них ярлыки, они также будут перемещены...

Перемещение с сохранением структуры и с учетом наличия исключаемых файлов в дочерних каталогах:
function move-rec ($a,$b){
begin{$splt = $a.split('\')[-1]}
process{
if($_.psiscontainer){
if(!(test-path ($fdst = $b+($_.fullname -split $splt)[1]))){
md $fdst|out-null
}
} else {
$fdst = $b+($_.directoryname -split $splt)[1]
mi $_.fullname $fdst
}
}
}

# Исходный и целевой каталоги
$src_m = [environment]::getfolderpath("desktop")
$dst_m = "d:\docs\$env:username"
# Исключаемые файлы
$ex = '*.lnk'

# перемещаем файлы с сохранением структуры
dir $src_m -rec -exc $ex|move-rec $src_m $dst_m

# удаляем пустые каталоги
dir $src_m -rec -dir|sort{$_.fullname.length} -des|%{
if((dir $_.fullname -rec) -eq $null){del $_.fullname}
}

iiama
31-05-2018, 02:33
Всем огромное спасибо, задача решена.




© OSzone.net 2001-2012