Я создал следующий файл .bat для очистки папок prefetch и temp в Windows 10:

cd %systemroot%\Prefetch
del /q /s *.*
cd %temp%
del /q /s *.*

Теперь в моей системе запуск файла выполнялся именно так, как и предполагалось, независимо от того, где я его выполнил. Однако в другой системе (также Win10) выполнение сценария с рабочего стола удаляло содержимое всего в папке рабочего стола (C:\Users\\Desktop).

Прямо сейчас я совершенно не понимаю, как это возможно. Буду благодарен за любые объяснения. Кроме того, я предполагаю, что нет эффективного способа восстановить данные, удаленные таким образом?

Спасибо.

РЕДАКТИРОВАТЬ: я понимаю, что запуск сценария с рабочего стола, когда первая папка не существует, вызывает удаление в каталоге рабочего стола, однако папки существуют.

2 ответа2

1

Здесь есть несколько возможностей. % temp% может быть настроен как папка пользователя на рабочем столе. Другая причина может заключаться в том, что по первой команде пользователь не имеет разрешения и поэтому не меняет путь.

Если скрипт запускается с рабочего стола, он не изменит папку и, как таковой, удалит эти файлы.

Если вы хотите защитить свой скрипт от подобных проблем, встроите оператор IF, чтобы проверить, совпадает ли% cd% с папкой, которую вы на самом деле хотите.

Также обратите внимание, что изменение каталога с помощью cd также не изменит диск, если вы не добавите /d. Вот как это выглядит без /d и с /d.

C:\>d:

D:\>cd c:\temp

D:\>c:

C:\temp>cd /d d:\games

D:\Games>

Как видите, без /d он меняет каталог, но не диск. Вы можете ввести d: и c: для переключения, но, используя /d в скрипте, вы всегда уверены, что диск тоже изменился.

Тем не менее, ваш сценарий будет выглядеть так:

@echo off

cd /d %systemroot%\Prefetch

IF %cd%==%systemroot%\Prefetch (
    del /q /s *.*
) ELSE (
    echo "The script was unable to switch to the folder %systemroot%\Prefetch."
)

cd /d %temp%

IF %cd%==%temp%  (
    del /q /s *.*
) ELSE (
    echo "The script was unable to switch to the folder %temp%."
)
0

Обратите внимание, что команда cd только меняет каталог, но не меняет текущий диск. В то время как Unix имеет только один текущий каталог, DOS/Windows имеет один текущий каталог для каждого диска. Таким образом, если ваш начальный каталог и целевой каталог находятся на разных дисках, вы получите именно этот эффект.

C:\Users\name\Desktop>cd D:\WINDOWS\Prefetch
C:\Users\name\Desktop>del /q /s *.*

После первой команды текущий диск остается C: а текущий каталог диска D: был изменен на D:\WINDOWS\Prefetch , поэтому вторая команда удалит C:\Users\name\Desktop , а не D:\WINDOWS\Prefetch .

Команда также может завершиться ошибкой, поскольку каталог не существует.

Простое решение - не разбивать команду на две части, а использовать одну команду:

del /q /s %systemroot%\Prefetch\*.*
del /q /s %temp%\*.*

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