Показать полную графическую версию : Перенос файлов и папок
Здравствуйте, помогите пожалуйста написать батник. Необходимо перенести все папки и файлы с рабочего стола (C:\Users\U001\Desktop\) за исключением ярлыков в определенную папку (D:\docs)
chcp 1251
MOVE /Y C:\Users\U001\Desktop\*.* "D:\docs\"
такая команда перемещает ярлыки и не перемещает папки.
Зачем вообще этот костыль? Если тебе нужно чтобы всё то барахло которые люди хранят на рабочем столе не занимало место на диске С - просто перемести рабочий стол на диск Д. Вот и всё.
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
Зачем вообще этот костыль? »
Дано: компьютерный класс, пара сотен учащихся, на рабочих столах постоянная помойка. Уровень пользователей: "не могу найти нужный ярлык".
Необходимо: каждый день при включении компьютера, сносить все файлы и папки на диск D. Главная задача — чистый рабочий стол (с нужными ярлыками), экономия места на С — задача второстепенная.
Главная задача — чистый рабочий стол (с нужными ярлыками), экономия места на С — задача второстепенная. »
Для текущего пользователя:
@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"
-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}
}
Всем огромное спасибо, задача решена.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.