给定一个文件,获取其在单独(结构相同)目录中的位置?

给定一个文件,获取其在单独(结构相同)目录中的位置?

我对 Windows shell 和 cmd 脚本一无所知,我对这个特殊问题绞尽脑汁,但却无计可施。

我的目标是添加一个上下文菜单项,右键单击文件以启动 WinMerge 并将其与单独的静态目录中的文件进行比较。如果这会调用特定的 cmd 文件,然后执行操作来解析目录,这应该没关系。

例如,我们有一组假设的目录和文件:

C:\released\versions\1.0\lib\libcode.cpp
C:\released\versions\1.0\component\componentcode.cpp
C:\dev\lib\libcode.cpp
C:\dev\component\componentcode.cpp

右键单击 C:\released\versions\1.0\component\componentcode.cpp 并选择它将打开 WinMerge 并将其与 C:\dev\component\componentcode.cpp 进行比较

我们可以假设 \dev\ 和 \1.0\ 结构上的所有内容在所有意图和目的上都是相同的。显然,WinMerge 本身的启动命令很简单,但我无法确定基础代码目录中文件的相对路径。

答案1

也许这会对你有帮助:

我有一个脚本可以自动从单个文件创建自解压 zip 文件。出于显而易见的原因,我已将此脚本添加到上下文菜单中。您可以尝试向上下文菜单添加一个调用脚本的命令,屏幕%1截图中是右键单击文件的完整路径,包括文件名:

在此处输入图片描述

实质上,在 HKCR\*\shell 下创建一个新的注册表项,并将其命名为您想要在上下文菜单中显示的任何名称。在该下创建一个新的键,标记为“命令”,并将该键的默认值设置为您想要调用的命令。在您的例子中,您可能需要一个简单的 powershell 脚本,该脚本将路径作为参数并根据该路径构建新路径,然后调用 winMerge 并传入这两个路径。Powershell 并不难上手,就像

param([String]$Path=$null)

$CodeDir = "C:\dev\component\"

$File1 = $Path
$File2 = "$CodeDir$(Get-ItemProperty $Path).Name"

Start-Process WinMerge.exe -Argumentlist "$File1 $File2"

显然,那里可以进行一些优化,但希望您明白这一点。我没有 WinMerge,所以我不知道正确的语法,但这是需要进行的操作的概要。要调用您的脚本,您可以查看我的屏幕截图并将我的脚本路径替换为您的脚本路径,您需要安装 Vista+ 上的标准 powershell。

相关内容