3

Я сделал этот пакетный скрипт, чтобы удалить некоторые вещи из локальных данных приложения и перенаправленных пользовательских папок.

Все это работает довольно хорошо, за исключением одной маленькой загадки ....

   set share=\\SERVER\d$\tsprofiles\%USERNAME%.V2\AppData\Roaming
   ECHO Deleting..... %share%
   net use Y: %share% 
   cd /D Y:\
   del * /F /S /Q
   del * /F /Q
   net use Y: /DELETE /YES

По какой-то причине путь, который создает общий ресурс var, ведет к пути UNC в проводнике, который я пытаюсь сопоставить с диском Y: но при использовании:

net use Y: %share%

Нет кости. Я уверен, что это не проблема с разрешениями, поскольку я запускаю это из учетной записи администратора домена и командной строки администратора ....

2 ответа2

2

По какой-то причине путь, который создает общий ресурс var, ведет к пути UNC в проводнике, который я пытаюсь сопоставить с диском Y: но при использовании:

Я не уверен, что вы подразумеваете под "переходом на путь UNC". Вы имеете в виду, что он меняется на этот каталог вместо создания общего ресурса?

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

set share=\\SERVER\d$\tsprofiles\%USERNAME%.V2\AppData\Roaming
ECHO Deleting..... %share%
del "%share%\*" /F /S /Q
del "%share%\*" /F /Q

Также я заметил твой пример с отступом. Этот фрагмент из блока условия / цикла заключен в круглые скобки? Например, IF EXIST "\\SERVER\d$" ( <your script lines here> ) .

Если сценарий вложен в скобках блока, вы должны использовать замедленное расширение на переменной share использование восклицательного знака вместо процентных символов , как это:

SETLOCAL ENABLEDELAYEDEXPANSION

IF EXIST "\\SERVER\d$" (
   set share=\\SERVER\d$\tsprofiles\%USERNAME%.V2\AppData\Roaming
   ECHO Deleting..... "!share!"
   net use Y: "!share!"
   cd /D Y:\
   del * /F /S /Q
   del * /F /Q
   net use Y: /DELETE /YES
)

ENDLOCAL

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

И, как уже было указано в комментариях, вам нужно указать долю в случае, если в %USERNAME% есть пробелы.

0

Это закончилось тем, что я, как и я, усложнил все это. Поэтому, основываясь на предложении @David Woodward, я немного переделал

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

set share=\\SERVER\d$\tsprofiles\%USERNAME%.V2\AppData\Roaming
ECHO Deleting..... %share%
del "%share%\*" /F /S /Q
del "%share%\*" /F /Q

Итак, в итоге я получил гораздо более упорядоченный скрипт, который намного лучше читать и намного быстрее. Большое спасибо всем вам!

SET dir=%~dp0
SET userfolder="\\SERVER\userfolders$\%USERNAME%\AppData\Roaming"
SET tsprofiles="\\SERVER\TSPROFILES$\%USERNAME%.V2\AppData\Roaming"
SET localdata="C:\Users\%USERNAME%\AppData\Local\Temp"
SET inetcache="C:\Users\%USERNAME%\AppData\Local\Microsoft\Windows\INetCache"
REM Start of script
@ECHO OFF
ECHO [(===============================================================)]
ECHO ^|^|                                                               ^|^|
ECHO ^|^|  Remove un-neccecary files from %USERNAME% on %COMPUTERNAME%  ^|^|
ECHO ^|^|                                                               ^|^|
ECHO [(===============================================================)]
ECHO Deleting.... %inetcache%
del "%inetcache%\*" /F /S /Q > null
del "%inetcache%\*" /F /Q > null
ECHO Deleting.... %localdata%
del "%localdata%\*" /F /S /Q > null
del "%localdata%\*" /F /Q > null
ECHO Deleting.... Using UNC path %USERFOLDER%
del "%userfolder%\*" /F /S /Q > null
del "%userfolder%\*" /F /Q > null
ECHO Deleting.... Using UNC path %tsprofiles%
del "%tsprofiles%\*" /F /S /Q > null
del "%tsprofiles%\*" /F /Q > null
ECHO Return to working DIR
cd /D %dir%

Я разместил это выше, если кто-то найдет это полезным

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