我有一个共享路径(比如// servername / c $ / batches /)我现在所有的批处理文件都在哪里我正在用C#写一个 Web应用程序来运行.bat来自该应用程序的文件。当我有物理路径时,我知道这样做的方法。 但在这里,我没有物理路径。是否可以这样做。
编辑#1
我只需双击它们就可以执行我的bat文件,或者在物理服务器上打开cmd程序,然后导航到驱动器并执行bat文件。
编辑#2
当我输入UNC路径时,得到以下错误
我收到错误myprogram.exe未被识别为内部或外部命令可操作程序或批处理文件。 9009
答案 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
您可以将此包装文件放在任何位置,然后从您的代码中调用它。