1 (изменено: irshat, 2013-12-07 12:01:38)

Тема: CMD/BAT: Выборочная очистка рабочего стола в Windows XP

Пользователи сохраняют документы отправленные через электронку или скайп на рабочий стол, тем самым за 1-2 месяца так его захламляя, что на поиск какой-либо программы уходит до 5 минут.
Создал батник с такой строкой, предварительно сохранив нужные ярлыки и папки в ALLUSERSPROFILE

move "%USERPROFILE%\Рабочий Стол\*.*" "%USERPROFILE%\Мои документы\"

Но особо одаренные пользователи создают еще папки, а как папки переносить так нигде и не нашел.
P.S. Пользователи в основном люди пожилого возраста, которых мышкой научили тыкать, и переучивать их сохранять в Мои документы себе дороже.

2

Re: CMD/BAT: Выборочная очистка рабочего стола в Windows XP

irshat пишет:

...а как папки переносить так нигде и не нашел.

Простите, уважаемый, но очевидно, что следовало бы не искать, а внимательней читать документацию (hh ntcmds.chm или help). Ко всему прочему не совсем понятны критерии переноса файлов: написано, что выборочная очистка, а по сути Вы отправляете в папку "Мои документы" все файлы разом. Каков вопрос - таков ответ, верно? А потому могу лишь сказать, что все папки перенести можно примерно так:

...
pushd "%userprofile%\Рабочий стол"
for /f %%i in ('dir /a:d /b') do move "%%i" "%userprofile%\Мои документы"
popd
...

3

Re: CMD/BAT: Выборочная очистка рабочего стола в Windows XP

Я наверно некорректно выразился в названии темы, надо было назвать "Очистка рабочего стола путем переноса файлов и папок в Мои документы".
За предложенный код спасибо, правда пришлось его немного переделать, так как ваш код не понимает пробелов.

move "%USERPROFILE%\Рабочий Стол\*.*" "%USERPROFILE%\Мои документы\"
pushd "%userprofile%\Рабочий стол"
for /f "tokens=* delims=" %%i in ('dir /s /b /a:d /b') do move "%%i" "%userprofile%\Мои документы"
popd
pause

Я не большой спец в батниках так что прошу сильно не ругать, если что-то не так в коде, главное работает.

4

Re: CMD/BAT: Выборочная очистка рабочего стола в Windows XP

irshat пишет:

Я не большой спец в батниках так что прошу сильно не ругать...

Вы почаще заглядывайте в документацию, там много чего полезного можно найти.

@echo off
  setlocal
     set doc="%userprofile%\Мои документы"
     pushd "%userprofile%\Рабочий стол"
     move *.* %doc%
     for /f "tokens=*" %%i in ('dir /sb /a:d') do move %%i %doc%
     popd
  endlocal
exit /b

Согласно Вашим предписаниям.

5

Re: CMD/BAT: Выборочная очистка рабочего стола в Windows XP

Спасибо, за отклик и доведенный до ума батник.

'dir /sb /a:d'

где sb, и в некторых строках кавычки, я правильно понял, просто опечатки.
Я немного подправил код:

@echo off
  setlocal
     set doc=%userprofile%\Мои документы
     pushd %userprofile%\Рабочий стол
     move "*.*" "%doc%"
     for /f "tokens=*"  %%i in ('dir /s /b /a:d') do move "%%i" "%doc%"
     popd
  endlocal

Испробовал ваш батник. Но тут по мере тестирования выявилась еще одна маленькая проблема, он не перемещает папку, если в Моих документах есть такая же папка с таким же именем. Пишет "Отказано в доступе". Не пойму почему, ведь файлы то он заменяет.

6

Re: CMD/BAT: Выборочная очистка рабочего стола в Windows XP

И что Вас смущает? Сами писали: "главное работает". Команда "move" не может сливать или заменять папки. Она "заточена" для работы с файлами и воспринимает папку как файл, поэтому при попытке переписать папку (как файл) получаем отказ в доступе. Тот же отказ в доступе, например, будет, если мы попытаемся открыть папку "Блокнотом".


Но если хотите, чтобы скрипт работал корректно, тогда так:

@echo off
set doc=%userprofile%\Мои документы
set desktop=%userprofile%\Рабочий стол
pushd %desktop%
for /f "tokens=*" %%i in ('dir /s /b') do (
  for /f "tokens=4* delims=\" %%j in ("%%i") do (
   if exist "%%i" (
    if not exist "%doc%\%%k\" (
     move /y "%%i" "%doc%\%%k"
))))
for /f "tokens=*" %%i in ('dir /a:d /b') do (
 rd  /s /q "%%i"
)
popd
pause>nul

Скрипт создан на основе такового, предложенного уважаемым greg zakharov.
Перемещение файлов и папок происходит в один этап согласно списку, выданному командой "dir /s /b".
Команда "rd  /s /q" удаляет оставшиеся на рабочем столе пустые папки (будьте осторожны с редактированием скрипта, т. к. эта команда может удалять и папки с файлами).
Скрипт не перемещает скрытые и системные файлы и папки (надеюсь, что ваши подопечные ещё не освоили команду "attrib +h +s").

7

Re: CMD/BAT: Выборочная очистка рабочего стола в Windows XP

greg zakharov и Yury большое человеческое спасибо за то, что откликнулись на мою проблему.
Yury считаю ваш скрипт законченным, и редактировать его не стоит, разве  что уберу последнюю строку, чтобы лишний раз не напрягать своих подопечных .