批处理文件路径奇怪

批处理文件路径奇怪

我编写了这个批处理脚本来从本地应用程序数据和重定向的用户文件夹中删除一些内容。

除了一个小问题之外,整个事情运行得相当顺利......

   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 share 创建的路径会导航到资源管理器中的 UNC 路径,而我正尝试将该路径映射到驱动器 Y:,然而当使用时:

net use Y: %share%

不行。我确定这不是权限问题,因为我是从域管理员帐户和管理员命令提示符运行此程序的……

答案1

由于某种原因,var share 创建的路径会导航到资源管理器中的 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%并且,正如评论中已经指出的那样,如果其中有空格,则需要引用共享。

答案2

这最终就像我把一切都复杂化了一样。所以根据@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%

如果有人觉得有用的话,我已经把它贴在上面了

相关内容