簡體   English   中英

在for循環批處理腳本(windows,批處理腳本)中的路徑中findstr命令變量擴展

[英]findstr command variable expansion in path in for loop batch script(windows, batch script)

echo off
set "MasterFolder=C:\Users\Development\test_folder"
SetLocal EnableDelayedexpansion
@FOR /f "delims=" %%f IN ('dir /b /s "%MasterFolder%\*.txt"') DO (
    set /a "idx+=1"
    set "FileName[!idx!]=%%~nxf"
    set "FilePath[!idx!]=%%~dpFf"
)

for /L %%i in (1,1,%idx%) do (
    echo [%%i] "!FileName[%%i]!"

    set "loc=%MasterFolder%\!FileName[%%i]!"
    echo path: %MasterFolder%\!FileName[%%i]!
    echo loc: !loc!
    FOR /F "tokens=1,2 delims=:" %%1 in ('findstr /o "^" "%MasterFolder%\test_1.txt"') DO (
        set new_pos=%%1
        echo new_pos !new_pos!
    )
)

上面的代碼有效,但是,下面的代碼不起作用。

echo off
... 
FOR /F "tokens=1,2 delims=:" %%1 in ('findstr /o "^" "%MasterFolder%\!FileName[%%i]!"') DO (
        set new_pos=%%1
        echo new_pos !new_pos!
    )
)
echo off
...
    FOR /F "tokens=1,2 delims=:" %%1 in ('findstr /o "^" "!loc!"') DO (
        set new_pos=%%1
        echo new_pos !new_pos!
    )
)

我所做的只是將test_1.txt替換為 !FileName[%%i]! , 或使用新變量並將所有變量替換為"!loc!" .

但是最后兩個代碼不起作用,我需要這種方式,因為它通過第一個 for 循環自動獲取文件夾中的文件名。

我想在 findstr 或變量擴展順序中存在錯誤,但我很難弄清楚。

很明顯!

使用!file... ,在行中引入一個感嘆號。

這會觸發解析器的第 5 階段(延遲的擴展階段)
在那個階段,變量被擴展,插入符號用於轉義下一個字符,獨立於它們的位置(引用與否)!

因此,您的搜索字符串"^"被轉換為""

只需將插入符號加倍即可findstr /o "^^" !File...

感嘆號效果有點出乎意料

setlocal EnableDelayedExpansion
echo One Caret "^"
echo One Caret "^" and a bang ^^!

輸出

一個脫字符“^”
一個插入符號“”和一聲巨響!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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