有两个甚至三个问题。
第一个是set Pass = Test
而不是set "Pass=Test"
,因为已经报告了。有关如何将值权分配给环境变量的更多详细信息,请参阅Why is no string output with 'echo %var%' after using 'set var = text' on command line?
我回答第二个问题是由网络驱动器,一旦用户到驱动器盘符映射,并在注册表想起造成的事实由Windows在用户注销时会自动断开连接,并且只有在同一用户再次登录时才会重新连接。
对于计划任务是非常因此经常需要使用的文件和文件夹的UNC路径上的共享文件夹的网络或连接网络驱动器,并在自己的计划任务执行的批处理文件断开。
无法使用UNC路径调用批处理文件。 Windows不允许这样做。因此,需要在批处理文件中手动连接和断开网络共享。我为这个问题提供了2个解决方案。
第一种是使用命令网使用:只有在计划任务无法与具有的权限来访问该批处理文件的用户帐户执行
%SystemRoot%\System32\net.exe use X: \\ComputerName\ShareName password /user:Domain\UserName /persistent:no
if not errorlevel 1 (
call X:\AutoMountConf.bat
%SystemRoot%\System32\net.exe use X: /delete
start "" /wait "C:\Program Files\TrueCrypt\TrueCrypt.exe" /auto favorites /p %Pass% /q
)
password
和/user:Domain\UserName
是必要的远程机器。一般来说,使用正确的用户帐户定义计划任务并确保此帐户的密码与任务一起更安全得多。 Windows存储任务加密的密码,就像它也为用户帐户本身一样。
在命令提示符窗口net use /?
中运行以获取有关必需选项和可选选项的详细信息。 /persistent:no
是避免记住Windows注册表中的网络共享以便在同一用户登录后自动重新连接。
第二个是使用命令PUSHD和POPD:
pushd \\ComputerName\ShareName
if not errorlevel 1 (
call AutoMountConf.bat
popd
start "" /wait "C:\Program Files\TrueCrypt\TrueCrypt.exe" /auto favorites /p %Pass% /q
)
请执行在命令提示符窗口pushd /?
和读取输出有助于理解为什么这个工程。
但是,此解决方案要求使用具有正确密码的计划任务的用户帐户对远程计算机上的共享具有适当的权限。批处理文件本身不能使用此解决方案指定密码和用户名。
if not errorlevel 1
表示前一个命令退出NOT的值是否大于或等于1意味着上一个命令的退出代码是否为0,因此命令执行成功。它始终可能发生,远程机器当前在网络上不可用,因此在连接到远程机器上共享时检查成功总是很好的。
还有就是为什么Pass
没有运行AutoMountConf.bat
后定义也许一个理由。
AutoMountConf.bat
包含SETLOCAL并执行该命令后,变量Pass
定义和ENDLOCAL之前在同一批处理文件被执行或由命令处理器隐含调用在离开AutoMountConf.bat
。
SETLOCAL结果在创造总是复制现有的环境变量和环境变量的所有修改都在这个本地副本完成。在执行(匹配)endlocal时或者在达到批处理文件结束时会恢复以前的环境变量,在这种情况下,命令处理器会自动恢复以前的环境。
请在命令提示符窗口setlocal /?
中执行并阅读输出帮助。
为例子来理解的命令上Echoing a URL in BatchSETLOCAL和ENDLOCAL甚至更好看答案和Why is my cd %myVar% being ignored?
感谢您的详细解释! 解决的办法是将批处理文件中的共享手册映射为网络使用。 完美! – HansDampfHH