2013-05-26 66 views
3

我認爲這是一個簡單的批處理編程問題,但經過多次搜索後,我找不到答案。批處理:文件名中的%

我想弄清楚如何引用名稱包含難字符的文件。

看來,雙引號的字面意思是處理大多數封閉字符。例如,對於名爲^^ .txt的文件,dir「^^。txt」將找到該文件,而dir ^^ .txt則不會。

但是,我不知道如何逃避%。例如,對於一個文件名爲%ERRORLEVEL%。txt文件,這些都不找到該文件:

目錄 「%ERRORLEVEL%.TXT」
目錄 「%% ERRORLEVEL %% TXT」
目錄「^% ERRORLEVEL ^%。txt「

任何建議,將不勝感激。

+0

@KenWhite,其實你可以。試試'echo> ^%ERRORLEVEL ^%。txt'。 –

+0

@KenWhite,不正確:[命名文件,路徑和命名空間](http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#naming_conventions)。 –

+0

啊,我認爲它在'''和'<'這樣的無效字符列表中。我立場糾正。 :-) –

回答

4

Windows命令提示符的轉義字符是^。它沒有引號。

dir ^%errorlevel^%.txt 

對於其他範例^^.txt,用途:

dir ^^^^.txt 
+0

謝謝,這有效!你能用^來逃離空間嗎?例如,對於名爲「Hello world.txt」的文件,dir Hello^world.txt似乎無法找到該文件。在這裏,我可以用dir使用引號,但是如果文件名同時包含%和空格呢? –

+0

有空格時請使用引號。 '%'只是起作用。所以'dir「%error level%.txt」'工作。如果沒有批處理文件,我無法刪除的文件是具有有效環境變量AND空格的文件,如'%errorlevel%%date%.txt'。使用'del「%% errorlevel %% %% date %%。txt」的批處理文件可以工作。 –

+1

@mdb - 從技術上講,這並不是逃避'%'擴展。變量擴展查找名爲'errorlevel ^'的變量,但是如果找不到它,它只會保留'%'s(僅限命令行)。在DIR命令的實際執行之前,脫掉卡片。如果變量'errorlevel ^'存在,它將被'%errorlevel ^%'擴展。脫字符可能出現在百分之百之間的任何地方。例如,'%error^level%'和命令行一樣好。 – dbenham

0

在一個批處理腳本,您必須順便說一句一倍%,如:

@echo off 
dir %%errorlevel%%.txt 

。你不應該使用cmd默認變量或命令名稱作爲其他事情(errorlevel)。

1

始終避免文件名中的%和^。在全局文件管理器中將%重命名爲'percent'。

They are next to impossible to handle properly in many batch commands.