2012-11-23 20 views
0

我正在嘗試創建一個快捷方式或批處理文件,以便坐在「發送到相對於當前文件路徑文件。使用快捷方式或批處理文件將文件移動到相對位置

因此,舉例來說,我希望創建一個檔案中的快捷菜單ocntext堅持將如下

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

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

移動文件,但我不明白怎麼捕獲當前文件路徑並將其傳遞給batch \ shortcut。

任何人都可以幫忙嗎?

回答

0

在批處理文件中,您可以獲得第一個參數的路徑,其中%~dp1%~p1的路徑。這意味着您想要將完整的文件名與路徑傳遞給批處理文件。

在批處理文件中使用此,例如移動一個文件,你可以做到以下幾點:

@echo off 
setlocal enabledelayedexpansion 
set fn=%~1 
move "!!fn!!" "%~p1archive" 

%~1從文件名中去掉引號,我只是做了習慣。

%~p1擴展到文件的路徑,並附有斜線。

注意,我這裏不包括檢查該目錄是否存在,這應該是很簡單的......在移動前添加此行來創建它:

md "%~p1archive" 
+0

OK,所以我用 '移動%1 「%〜DP1 \ _ARCHIVE \%〜NX1」' 這可以巧妙一點,但爲單個文件做了工作。 我真的需要能夠將多個文件一次發送到一個位置以使其高效 - 我認爲這將依次在每個文件上運行,但只需要第一個文件即可停止。我將如何適應從發送到菜單一次使用多個文件? – user1845952

+1

這裏不需要延遲擴展,也可以使用2'!'而不是一個。它看起來應該像'move'%fn%「」%〜p1archive「'。 –

1

有趣的是,窗戶相對路徑呢當使用..時,不區分文件&目錄。

簡單地說,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 " 
相關問題