如何在没有 pushd 的情况下获取 UNC 路径上的文件大小?

Posted

技术标签:

【中文标题】如何在没有 pushd 的情况下获取 UNC 路径上的文件大小?【英文标题】:How to get file's size on UNC path without pushd? 【发布时间】:2015-03-30 16:07:29 【问题描述】:

我正在帮助 bud 修复一个最近更改为使用 UNC 路径的应用程序。在他可以使用bat文件运行之前

@echo off
echo %~z1

获取文件的大小。

现在 bat 文件将无法工作,因为 CMD 不支持将 UNC 路径作为当前目录。我考虑过使用 pushd 命令临时创建一个指向网络资源的驱动器号,但我认为必须有一种更直接、更清洁的方法来做到这一点我可能只是对 CMD 的经验还不够了解它.

任何建议或帮助将不胜感激!

谢谢。

更新

为了澄清何时调用 bat 文件(通过使用 exec() 函数的 php 文件)我没有得到任何响应。我尝试了几种调试方法(已经有几天了,所以我不记得具体是什么了),但我能得到的最多的是“Echo 已关闭”或“系统找不到指定的文件”。错误。我可以将文件地址复制/粘贴到我的 Windows 资源管理器中,但我可以找到该文件。

更新二

已经注意到,尽管不支持 UNC,但代码应该没有问题。如果这是真的,那么还有什么问题呢?就像我之前所说的,我可以复制并粘贴提供给 bat 文件的文件路径,它们可以在 Windows 资源管理器中正常打开。

更新 III

我尝试计时执行 bat 文件所需的时间,它似乎随机地几乎不需要时间或一分钟多一点。所以我猜这可能是我的问题所在。但是,当我通过 ajax 调用运行它时,它的响应时间约为 550-650。我不知道是什么导致 bat 文件的执行时间变化如此之大。欢迎任何想法!

提前感谢您的任何意见!

【问题讨论】:

这适用于我在 XP 中。你能详细说明你得到的错误吗?是在控制台吗?怎么叫批处理? 【参考方案1】:

cmd 与 UNC 活动目录不兼容,但文件中的代码不会有任何问题。您可以调用为

\\server\share\folder\file.bat \\server\share\folder\file.txt
d:\folder\file.bat "\\server\share\folder with spaces\file.txt"
"\\server\share\folder with spaces\file.bat" d:\file.txt
....

在任何情况下,只要批处理文件和要处理的文件都存在,您发布的代码就可以工作

【讨论】:

好的酷,你能解释一下为什么这种情况下的代码会特别有效吗?这似乎与微软文档所说的直接矛盾。 如果 UNC 路径不是问题,那么您认为它可能是什么,因为路径几乎是自它损坏以来唯一改变的东西? @gv0000, 1) 如果文件名/路径包含空格,您需要包含适当的引号(必要时在批处理和文件中引用)。 2) 你如何执行 PHP 代码,直接调用脚本或从 Web 服务器?第二种情况,web服务器下运行的账号是否可以访问远程资源? @gv0000, 最后一个反斜杠是拼写错误吗? @gv0000,我一直在使用本地和远程 bach 文件、本地和远程数据文件测试您的代码,从命令行 (php -f test.php) 调用 php 脚本,一切正常只要调用脚本的用户有权访问远程文件夹。

以上是关于如何在没有 pushd 的情况下获取 UNC 路径上的文件大小?的主要内容,如果未能解决你的问题,请参考以下文章

[Bat]UNC路径不支持的2种解决方法

如何在 Java 中检查文件大小而不从 UNC 路径读取文件?

从映射的网络驱动器获取 UNC 路径

使用 pushd 和 popd 实现快速切换目录

在 C# 中将 UNC 路径转换为本地路径

如何(快速)检查 UNC 路径是不是可用