簡體   English   中英

在Windows批處理腳本的for循環中獲取子字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM