Я не могу найти c:\users\internet\downloads\new.txt при запуске сценария в cmd

это потому что есть значок блокировки на учетной записи пользователя на windows7, скрипт работает нормально, если я изменяю местоположение в папку c:\test

forfiles.exe /P "C:\ Users \ Internet" /S /M. /D -7 /C "cmd.exe /c del /Q" "@path" "

Что мне нужно сделать, так это удалять файлы каждые 7 дней, оставленные в папке «Мои документы и загрузки», в общей учетной записи библиотеки, используемой всеми на работе, это гостевая учетная запись Windows 7.

1 ответ1

0

Хорошо. Так что это не Guest Local account а локальная учетная запись .

Сначала некоторые мелочи, которые я заметил в вашем сценарии.

  • Если вы собираетесь удалить все данные старше 7 дней во всем профиле (как это делает ваш скрипт), у вас будут проблемы. Вы также удалите множество файлов в appdata , "настройках программы" и т.д. Вы не хотите этого, потому что эти программы могут стать непригодными для использования. По умолчанию вы не видите эти файлы / каталоги, но если вы используете командную строку, они там есть. (Попробуйте установить обозреватель для отображения скрытых файлов или введите C:\Users\Internet\appdata в адресной строке)
  • Я все еще ничего не получаю с /M . , Мне нужно использовать /M *.* Или опустить его полностью. (по умолчанию /M *)
  • Если вы работаете с этим самим (а не с "интернетом"), у вас недостаточно прав для их удаления. (Отсюда значок блокировки в файле). Прежде чем вы сможете удалить их, вы должны стать владельцем файлов. Вы можете попробовать запустить скрипт от имени администратора, но я не уверен, поможет ли это.

Есть несколько способов решения этой проблемы. Ниже я упоминаю другой подход к сбросу всей учетной записи. Но вот скрипт, который удаляет файлы старше 7 дней.

Текущий каталог меняется на C:\Users\Internet (popd меняет его обратно). Затем он просматривает заданный набор каталогов, из которых вы хотите удалить файлы. Вы видите, я не указал весь appdata -dir, но включил в себя AppData\Local\Temp и Temporary Internet Files . Добавьте свой, если хотите. Он вступит во владение (для вас) всеми указанными файлами и каталогами. Затем он предоставит Everyone права на эти файлы (чтобы он не прерывал их программы). После этого будут удалены только файлы старше 7 дней. Вам нужно указать del /a чтобы включить удаление скрытых файлов.

(Я добавил несколько проверок вверху командного файла, чтобы убедиться, что вы находитесь в правильном каталоге. Вы действительно не хотите делать это в другом каталоге случайно.;)

@echo off
PUSHD C:\Users\Internet
IF /I "%cd%"=="C:\Users\Internet" GOTO OK
ECHO Oops, CD didn't work. You really don't want to do this in another directory !!!
POPD
EXIT/b
:OK
SET "dirs=AppData\Local\Temp:Contacts:Desktop;Documents:Downloads:Favorites:Links:Music:Pictures:Videos:AppData\Local\Microsoft\Windows\Temporary Internet Files"
FOR %%d IN ("%dirs::=" "%") DO (
  TAKEOWN /R /D Y /F %%d
  ICACLS %%d /T /GRANT Everyone:F
  FORFILES /P %%d /S /D -7 /C "cmd /c del /q /a "@path""
)
POPD

Это не удалит "настройки программы", но также оставит только другие временные каталоги (кроме AppData\Local\Temp). Так что если у вас есть другие каталоги, вы можете включить их в set -line.

Другой подход - сбросить всю учетную запись пользователя. Вы могли бы сделать

net user internet /delete
net user internet /add
rd c:\users\internet /s/q

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

По какой причине следует удалять только файлы старше 7 дней? Если вы действительно хотите получить файлы младше 7 дней, вам нужен первый скрипт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .