使用pushd和popd命令与UNC路径

5

我正在运行以下批处理文件来运行一个存储在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"

1
点击此链接阅读。 - elzooilogico
阅读此内容:pushdpopd - aschipfl
1个回答

8
您可以使用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

这个命令应该可以解决问题。

命令popd用来:
1) 删除网络驱动器和
2) 弹出路径中的目录

所以你实际上可以先推入你需要的所有服务器路径(基于你的文件系统最多可达到20个),然后在循环中为每个路径执行相同的操作,执行popd以进入下一个存储路径。

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

注意:只有至少还有一个未使用的驱动器号才能使用此方法,因为它被用于临时映射!

编辑:添加了pushd "%~dp0",以消除评论中提到的一个警告。 %dp0代表drive和path的0号批处理文件参数,始终是批处理文件本身。 ~会删除潜在的周围引号。

编辑2:我打开了自己的Windows 7虚拟机来测试这个命令。 我写了一个.exe文件,它的唯一目的是执行一个批处理文件,该批处理文件将在桌面上创建一个带有当前时间的文件。 我没有服务器,因此我无法进行100%的测试,但是当我尝试使用pushd \\localhost\c$从虚拟机运行它时,它正常工作... 我尝试从主机建立连接,但无法使其以任何方式都能工作。你尝试过只运行在服务器上创建的批处理文件吗?像这样的:

%time%>"%USERPROFILE%\Desktop\myFile.txt"

只是测试连接吗?

如果有什么不清楚的地方,请随时询问!


我按照您说的做了,暂停了它,可以看到创建了一个驱动器字母y,但仍然收到UNC路径不受支持的消息。 - John Molina
看一下我回答中的代码。注意我已经删除了导致问题的路径部分:“\Server\c$”。如果这样做不能解决问题,还有其他信息吗? - geisterfurz007
当我暂停它时,它会显示这个。 - John Molina
你想让它做的事情是否已经起作用了?因为没有显示“找不到指定的路径”,所以应该已经起作用了。在elzooilogico发布的帖子中,评论中提到可以添加pushd %dp0来解决警告。我会进行编辑。 - geisterfurz007
当我回家后,我会尝试一些东西... 我们会成功的! - geisterfurz007
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接