2014-10-18 43 views
0

我試圖替換文件名,但它不起作用。BATCH一行cmd:替換文件名不起作用?

我知道這工作:(!命令行,沒有.bat文件)

SET G="test string" 
echo %G:s=a% 

但是,如果我用一個for循環它不工作。爲什麼? (命令行,沒有.bat文件!)

for /r . %G in (*.jpg) do echo %G:s=a% 

感謝您的幫助!

回答

1

你混淆了一個批變量使用FOR命令替換參數。在這些線路:

SET G="test string" 
echo %G:s=a% 

G是一個批處理變量,但在這其中:

for /r . %G in (*.jpg) do echo %G:s=a% 

G是一個可更換參數和子更換隻適用於批量的變量。解決方法是將FOR參數分配給批量變量,然後進行替換。然而,這樣做的唯一方法是通過延遲擴展,因此該解決方案是這樣的:

cmd /V:ON /C for /r . %G in (*.jpg) do @set "G=%G" ^& echo !G:s=a! 

有關詳細信息,搜索這個網站的「延遲擴展」或鍵入cmd /?set /?,並仔細閱讀「延期擴展「引用。

1

BAT中的for循環需要加倍「%%」。 另外,for變量不支持替換,並且變量在執行前被替換。

For/r。 %%的G(* .JPG)做@echo %%摹

試試這個:

setlocal ENABLEDELAYEDEXPANSION 
for %%g in (*.JPG) do @set Q=%%g && echo !Q:t=X!