我正在尝试创建一个快捷方式批处理文件,以便放在windows'send到'菜单中,该菜单将文件发送到相对于文件当前文件路径的位置。
因此,例如我想创建一个存档快捷方式,以便粘贴在可以移动文件的ocntext菜单中,如下所示
C:\cheese\stilton.txt > C:\cheese\archive\stilton.txt
或
C:\biscuits\hobnobs.txt > C:\biscuits\archive\hobnobs.txt
但我不明白如何捕获当前文件路径并将其传递给批处理\快捷方式。
有人可以帮忙吗?
答案 0 :(得分:1)
有趣的是,Windows相对路径不区分文件和文件。目录,使用..
时。
简单地说,move "%1" "%1"\..\archive
也有效。 ;-)虽然不是一个干净的方式。 :-)
还要确保在移动之前执行mkdir "%1"\..\archive
。
此外,您可以考虑将其添加到注册表中,而不是发送到;特定于文件类型。
对于文本文件,.reg文件如下所示:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\txtfile\shell\movefile]
@="Move to archive"
[HKEY_CLASSES_ROOT\txtfile\shell\movefile\command]
@="cmd /c mkdir \"%1\"\\..\\archive & move \"%1\" \"%1\"\\..\\archive "
答案 1 :(得分:0)
在批处理文件中,您可以使用%~dp1
获取第一个参数的路径,或只使用%~p1
获取路径。这意味着您希望传递包含批处理文件路径的完整文件名。
要在批处理文件中使用它,例如移动文件,您可以执行以下操作:
@echo off
setlocal enabledelayedexpansion
set fn=%~1
move "!!fn!!" "%~p1archive"
%~1
删除了文件名中的引号,我只是出于习惯而这样做。
%~p1
扩展到文件的路径,并附加斜杠。
请注意,我没有在这里检查目录是否存在,这应该足够简单...在移动之前添加此行来创建它:
md "%~p1archive"