2013-11-01 92 views
1

我完全不熟悉批處理文件編程,所以請原諒我,如果這顯而易見。說我有存儲在一個字符串c:\some\path\someFile.extension TheFileToPass和我來自同一個批處理文件調用另一個exe文件,這樣我只能通過它從TheFileToPass(即,someFile)扣除文件名。從變量獲取文件名

的什麼,我試圖做一個僞代碼:

串TheFileToPass = 「C:\一些\路徑\ someFile.extension」

呼叫external_tool.exe TheFileToPass.GetFileNameWithoutExtension()

通過網上搜索我才知道,%〜NI可以解決這個問題,但我該如何使用它的TheFileToPass變量?我曾嘗試以下,但沒有什麼工作:

回聲%%〜TheFileToPass

呼應%%〜N%TheFileToPass%

編輯

好吧,我嘗試更具描述性。我有一對夫婦在我們的批處理文件中定義的「局部變量」的:

set someFlag1= 
set someFlag2= 
set someFile= 

然後我解析命令行參數,並把它們上面的內聲明的變量。批處理文件可以具有可變數量的命令行參數,因此值的位置可以根據某些預定義的規則而變化。簡而言之,我們不能確定%1,%2,%3(等等)哪個永遠有文件路徑。無論如何,根據預定義的規則,我們解析命令行參數(使用SHIFT循環技術)並將這些信息保存在我們的變量中:someFlag1,someFlag2和someFile。

現在,someFile包含文件的完整路徑,例如:「c:\ some \ path \ file.txt」。我們希望調用一個外部exe文件,並從someFile變量(本例中爲「file」)的內容中傳遞文件名。

那麼我們對「someFile」變量進行什麼操作,我們只從完整路徑獲取文件名?

+0

你的解釋是很難按照這裏 - 你可以給一些例子? 'filename = one.txt''string-inside-one.txt = apple.orange''需要啓動= two.exe one.apple'是嗎? – foxidrive

回答

1

你說你是通過批處理文件的參數,使用移位得到的文件名進行迭代。因此,在某些時刻,你將有什麼作爲

set "someFile=%~1" 

然後,你需要補充的是,文件名的提取到以後使用它

set "onlyFileName=%~n1" 
+0

甜!是的,這是有效的。謝謝!在我標記問題解決之前,我仍然想知道我們是否可以直接對包含路徑信息的變量執行類似的操作?如果是,那麼語法是什麼? –

+0

這將在只有文件名或完整文件路徑的參數變量(本例中爲%1)上起作用。我們要求cmd只檢索文件名部分。如果完整路徑在一個標準變量('set some = ...')中,那麼npocmaka(對於%% f in(「%some%」)中的答案做set fileName = %%〜nf')會得到文件名。請注意,sintax與%,%%相同,取決​​於變量,〜,n(獲取文件名)以及對變量的引用(參數case中的值爲1,case中的值f) –

0

這取決於您如何將文件傳遞到批處理文件。

您要麼通過命令行並使用%〜dpn1(您需要路徑),要麼硬編碼傳遞給bat中的函數並使用相同的%〜dpn1。

類型

call /? 
set /? 
0
for %f in ("%TheFileToPass %") do call external_tool.exe %~nf.GetFileNameWithoutExtension()