我们可以从共享路径运行批处理文件(.bat)

时间:2011-09-21 17:23:29

标签: c# .net asp.net windows batch-file

我有一个共享路径(比如// servername / c $ / batches /)我现在所有的批处理文件都在哪里我正在用C#写一个 Web应用程序来运行.bat来自该应用程序的文件。当我有物理路径时,我知道这样做的方法。 但在这里,我没有物理路径。是否可以这样做。

编辑#1

我只需双击它们就可以执行我的bat文件,或者在物理服务器上打开cmd程序,然后导航到驱动器并执行bat文件。

编辑#2

当我输入UNC路径时,得到以下错误

我收到错误myprogram.exe未被识别为内部或外部命令可操作程序或批处理文件。 9009

3 个答案:

答案 0 :(得分:14)

批处理文件不支持UNC路径作为其“当前目录”。这是一个非常糟糕的工作:

pushd "%~dp0"
your batch stuff
popd

%~dp0扩展为当前(d)rive /(p)ath /(0)batchfilename


示例:

确定。一个简单的批处理文件:

pushd %~dp0
echo "Hello from batch land"
echo %~dp0
popd

将它放在某处的服务器上,并尝试通过unc路径运行它:

C:\> \\server\share\test.bat

你会得到输出:

C:\>pushd \\server\share\

Z:\>echo Hello from batch land
Hello from batch land

Z:\>echo \\server\share\
\\server\share\

Z:\>popd

C:\>

很奇怪,但它确实有效。

答案 1 :(得分:0)

这称为 UNC路径 您可以像使用其他任何路径一样使用它。

但是,运行ASP.Net代码的用户必须具有对网络共享的读取权限。

答案 2 :(得分:0)

显然,您有当前目录问题 .bat文件正在尝试从当前目录运行myprogram.exe

您可以在本地计算机上创建一个映射网络共享的包装器批处理文件:

pushd \\server\c$\dir
call filename.bat
popd

您可以将此包装文件放在任何位置,然后从您的代码中调用它。