我試圖替換文件名,但它不起作用。BATCH一行cmd:替換文件名不起作用?
我知道這工作:(!命令行,沒有.bat文件)
SET G="test string"
echo %G:s=a%
但是,如果我用一個for循環它不工作。爲什麼? (命令行,沒有.bat文件!)
for /r . %G in (*.jpg) do echo %G:s=a%
感謝您的幫助!
我試圖替換文件名,但它不起作用。BATCH一行cmd:替換文件名不起作用?
我知道這工作:(!命令行,沒有.bat文件)
SET G="test string"
echo %G:s=a%
但是,如果我用一個for循環它不工作。爲什麼? (命令行,沒有.bat文件!)
for /r . %G in (*.jpg) do echo %G:s=a%
感謝您的幫助!
你混淆了一個批變量使用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 /?
,並仔細閱讀「延期擴展「引用。
BAT中的for循環需要加倍「%%」。 另外,for變量不支持替換,並且變量在執行前被替換。
For/r。 %%的G(* .JPG)做@echo %%摹
試試這個:
setlocal ENABLEDELAYEDEXPANSION
for %%g in (*.JPG) do @set Q=%%g && echo !Q:t=X!