通过UNC路径使用push和popd命令

Joh*_*ina 4 batch-file

我正在运行以下批处理文件以在其中运行存储的软件包,但SQL出现UNC Paths are not supported错误。如果我在服务器上运行它,它将正确运行。如果我与其他用户共享,则不会。我不想创建地图驱动器。我一直在阅读有关pushd命令的信息,它可能是一个选择,但不确定其工作方式。有人可以指导我吗?

"\\Server\c$\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\DTExec.exe" /f "\\Sever\c$\Packages\Unapplied and Patient Balances.dtsx"
Run Code Online (Sandbox Code Playgroud)

gei*_*aos 5

如果可以,可以将其pushd用作快速版本net use
如您所见,不支持UNC路径,因此您必须变通。该命令pushd \\Server\Path\将在运行该计算机的机器上创建一个网络驱动器Z:\,然后自动切换至该网络驱动器(例如cd /d Z:\),并将路径压入堆栈(稍后再介绍)。

然后,您可以使用它来访问服务器目录:

pushd "%~dp0"
pushd \\Server\c$
"Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\DTExec.exe" /f "Packages\Unapplied and Patient Balances.dtsx"
popd
Run Code Online (Sandbox Code Playgroud)

应该做到的。

该命令popd用于
1)删除网络驱动器和
2)从路径中弹出目录

因此,实际上您可以首先推送所需的所有服务器路径(根据文件系统,最多可达20个),然后在循环中为每个路径执行相同的操作,然后执行popd转到下一个存储的路径。

pause之前添加popd并查看资源管理器时,可以看到驱动器已连接。

注意:这仅在至少一个驱动器号仍未使用时才有效,因为临时映射需要它!

编辑:添加pushd "%~dp0"以摆脱评论中提到的警告。%dp0代表着d里沃和p的的ATH 0,始终是批处理文件本身个批处理文件参数。在~消除潜在的包围引号。

Edit2:我启动了Windows 7 VM自己进行了测试。我写了一个.exe文件,它的唯一目的是执行一个批处理文件,该批处理文件将仅在当前时间在桌面上创建一个文件。我没有服务器,因此无法将其测试到100%,但是当尝试使用它从VM运行它时,pushd \\localhost\c$效果很好...我试图从主机建立连接,但无法使其正常工作,也无法另一个。您是否尝试过运行在服务器上创建的批处理文件?就像是:

%time%>"%USERPROFILE%\Desktop\myFile.txt"
Run Code Online (Sandbox Code Playgroud)

只是为了测试连接?

随意询问是否不清楚!