2015-09-04 55 views
3

我使用像這樣(的Windows 7 x64)的一個forfiles命令行:如何逃避`forfiles`中的`@`變量替換?

forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @relpath" 

我怎樣才能逃避更換@relpath的(相對路徑至當前迭代的項),以獲得@relpath輸出字面上? (?...或任何其他@變量)


到目前爲止,我嘗試了以下的東西,沒有成功:

  • \:在@似乎被處理之前\所以\@relpath不起作用,而擴大後的輸出只是前面\;
  • ^:陳述^@除了^消失之外沒有顯示任何效果;寫^^@沒有幫助,一個^仍然在擴大輸出,然後;令人驚訝的是(對我而言),forfiles-特定的六進制數0x40的替換也不起作用,似乎這是在變量解析之前完成的;
  • @@:加倍@保持字面上的第一個@,就是這樣;

回答

2

我剛剛找到一種更簡單的方法:

forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @^relpath" 

注意^@跡象。

+0

這似乎是最好的方法 – jeb

3

你可以使用一個延遲擴展

forfiles /P "C:\temp" /M "st*.txt" /C "cmd /v:on /C set r=0x40 & echo !r:~0,1!relpath" 

或者您可以使用百分號展開。

set percent=% 
set [email protected] 
forfiles /P "C:\temp" /M "st*.txt" /C "cmd /C echo %percent%at%percent%relpath" 
+0

既可以工作... – Stephan

+0

偉大的方法!在第一個選項中,如果你在'set r = 0x40'之後省略了空格,或者將它放在'()'中,那麼像'!r!'這樣的簡單擴展也可以工作...... – aschipfl