Batch file 如何更改批处理文件的代码,使其可以从网络资源而不是驱动器的根目录执行?

Batch file 如何更改批处理文件的代码,使其可以从网络资源而不是驱动器的根目录执行?,batch-file,cmd,Batch File,Cmd,我需要的代码运行直接从计算机(共享网络文件夹),而不是从一个USB驱动器,这是强制性的,因为它可以在代码中看到 set pathToScript=%~d0 set pathToRessources=%~d0\Resources set pathToGPO=%~d0\TemplateGPO cscript //B "%windir%\system32\slmgr.vbs" /ato mkdir "%WINDIR%\display" 如何更改此批处理文件的代码,使其可以从网络资源上的目录而不

我需要的代码运行直接从计算机(共享网络文件夹),而不是从一个USB驱动器,这是强制性的,因为它可以在代码中看到

set pathToScript=%~d0
set pathToRessources=%~d0\Resources
set pathToGPO=%~d0\TemplateGPO

cscript //B "%windir%\system32\slmgr.vbs" /ato 

mkdir "%WINDIR%\display"

如何更改此批处理文件的代码,使其可以从网络资源上的目录而不是驱动器的根目录执行?

由于命令行的原因,批处理文件必须从驱动器的根目录运行:

set pathToScript=%~d0
set pathToRessources=%~d0\Resources
set pathToGPO=%~d0\TemplateGP
这三行应改为:

set "pathToScript=%~dp0"
set "pathToRessources=%~dp0Resources"
set "pathToGPO=%~dp0TemplateGPO"
然后可以从本地驱动器的任何目录成功执行批处理文件。但批处理文件仍然无法从使用UNC路径访问的网络资源目录中成功执行,因为命令行:

cd /d "%pathToScript%"
Windows默认情况下防止将使用UNC路径访问的网络资源上的目录设置为当前目录,因为可执行文件不支持当前目录是路径不以驱动器号和冒号开头的目录。解决方案是使用
pushd
popd
而不是
cd

可从任何具有本地管理权限的目录执行的修改批处理文件:

@echo off
rem RUN AS ADMIN
setlocal EnableExtensions DisableDelayedExpansion

set "pathToScript=%~dp0"
set "pathToRessources=%~dp0Resources"
set "pathToGPO=%~dp0TemplateGPO"

%SystemRoot%\System32\cscript.exe //B "%SystemRoot%\System32\slmgr.vbs" /ato

mkdir "%SystemRoot%\display"

copy /y "%pathToRessources%\Teneris-Background-Bilingual.jpg" "%PUBLIC%\Pictures\"

copy /y "%pathToRessources%\ssText3d.scr" "%PUBLIC%\Pictures\"

copy /y "%pathToRessources%\Teneris-Lock-Bilingual.jpg" "%SystemRoot%\display"

pushd "%pathToScript%"
lgpo.exe /g "%pathToGPO%\{A213BE3C-CA6C-4F72-9235-FC52719EB79F}"
popd

endlocal
%SystemRoot%\System32\shutdown.exe /r /t 15 /c "post config shutdown in less than 30 sec"
三条线

pushd "%pathToScript%"
lgpo.exe /g "%pathToGPO%\{A213BE3C-CA6C-4F72-9235-FC52719EB79F}"
popd
也许可以改成

"%pathToScript%lgpo.exe" /g "%pathToGPO%\{A213BE3C-CA6C-4F72-9235-FC52719EB79F}"
如果还可以从与其存储位置不同的目录执行可执行文件
lgpo.exe
,这将使批处理文件更快,并且如果使用组策略或计划任务执行批处理文件也会更好

要了解所使用的命令及其工作方式,请打开一个窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 呼叫/?
    。。。解释引用参数0的驱动器的
    %~d0
    ,即使用UNC路径启动批处理文件时分别存储批处理文件的驱动器和引用参数0的驱动器和路径的
    %~dp0
    ,参数0是批处理文件的完全限定路径,始终以反斜杠结尾
  • cscript/?
  • echo/?
  • endlocal/?
  • mkdir/?
  • popd/?
  • pushd/?
  • rem/?
  • 设置/?
  • setlocal/?
  • 关机/?

我不知道
lgpo.exe
是否也支持以
/?
作为参数执行它,以显示此应用程序的帮助。

代码中没有任何内容要求它从USB驱动器运行(只是一句说明)。