CMD/BAT - Перенос файлов и папок

Ответить
Аватара пользователя
iiama

CMD/BAT - Перенос файлов и папок

Сообщение iiama »

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



chcp 1251

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



такая команда перемещает ярлыки и не перемещает папки.
Аватара пользователя
Charg

Re: CMD/BAT - Перенос файлов и папок

Сообщение Charg »

Зачем вообще этот костыль? Если тебе нужно чтобы всё то барахло которые люди хранят на рабочем столе не занимало место на диске С - просто перемести рабочий стол на диск Д. Вот и всё.
Аватара пользователя
megaloman

Re: CMD/BAT - Перенос файлов и папок

Сообщение megaloman »

Если для одного конкретного пользователя, то:

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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








Если для всех пользователей прописанных в, например, C:\Users, то:

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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

+ выделенный кусок кода из предыдущего скрипта



Примечание:[/i] Файлы пользователя будут перенесены в папку с именем пользователя, например: D:\Docs_U001
Аватара пользователя
iiama

Re: CMD/BAT - Перенос файлов и папок

Сообщение iiama »

Цитата Charg:



Зачем вообще этот костыль?
CMD/BAT - Перенос файлов и папок




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



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

Re: CMD/BAT - Перенос файлов и папок

Сообщение YuS_2 »

Цитата iiama:



Главная задача — чистый рабочий стол (с нужными ярлыками), экономия места на С — задача второстепенная.
CMD/BAT - Перенос файлов и папок




Для текущего пользователя:



Код:

Код: Выделить всё

@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

Re: CMD/BAT - Перенос файлов и папок

Сообщение DJ Mogarych »

Powershell:



Код:

Код: Выделить всё

Move-Item -Path "C:\Users\U001\Desktop\*" -destination "D:\docs" -Exclude "*.lnk"
Аватара пользователя
YuS_2

Re: CMD/BAT - Перенос файлов и папок

Сообщение YuS_2 »

Цитата DJ Mogarych:



-Path "C:\Users\U001\Desktop\*"
CMD/BAT - Перенос файлов и папок




тогда уж:

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

Re: CMD/BAT - Перенос файлов и папок

Сообщение iiama »

Всем огромное спасибо, задача решена.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»