使用快捷方式或批处理文件将文件移动到相对位置

时间:2012-11-23 10:59:07

标签: windows batch-file shortcut

我正在尝试创建一个快捷方式批处理文件,以便放在windows'send到'菜单中,该菜单将文件发送到相对于文件当前文件路径的位置。

因此,例如我想创建一个存档快捷方式,以便粘贴在可以移动文件的ocntext菜单中,如下所示

C:\cheese\stilton.txt > C:\cheese\archive\stilton.txt

C:\biscuits\hobnobs.txt > C:\biscuits\archive\hobnobs.txt

但我不明白如何捕获当前文件路径并将其传递给批处理\快捷方式。

有人可以帮忙吗?

2 个答案:

答案 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"