[英]Getting a substring in a for loop in Windows batch script
我不確定在這里做錯了什么,但是我正在嘗試解析文件夾中的一些XML文件並獲取每個文件名的子字符串。 這是我在.bat文件中得到的:
for %%f in (*.xml) do (
echo %%f
echo %%f:~3,-4%%
)
第一個回顯會很好地打印出文件名。 但是第二個回聲是我遇到的麻煩。 我得到類似NewABCDEFG.xml的輸出:
NewABCDEFG.xml
NewABCDEFG.xml:~3,-4%
當我應該得到:
NewABCDEFG.xml
ABCDEFG
我不知道怎么了。 如果我自己在命令行中運行substring命令,它可以正常工作。 有什么建議么?
使用以下腳本對其進行了修復:
setlocal EnableDelayedExpansion
for %%f in (*.xml) do (
set filename=%%f
echo !filename:~7,-4!
)
設定行是我真正需要的,以便按照幫助指南進行操作,在執行時擴展環境變量。
首先將%%f
更改為%%I
,這將使其更易於閱讀。
for %%I in (*.xml) do echo %%I & echo %%~nI
在這種情況下,無需延遲擴展。 但是,我的首選是避免使用多命令行塊:
for %%I in (*.xml) do call :DoIt %%I
exit /b
:DoIt
echo %1
echo %~n1
exit /b 0
還應避免替換變量和修飾符之間可能出現的混淆,例如,允許您使用%%a
.. %%z
或%%A
.. %%Z
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.