1

スクリプトで DelayedExpansion を有効にすると、ファイル名の文字列「 ! 」がエコーされません。例えば:


のファイル01-TEXT!.txt


File01-TEXT.txt をエコーアウトする

のせいだと思いますがsetlocal EnableDelayedExpansion、必要なので削除できません。

@echo off
setlocal EnableDelayedExpansion

cd "C:\Files"
for %%a in (*.txt) do (

    REM Here's the problem...
    echo %%a

    set "str=%%a"
    set new_str=!str:0,3!
)

echo %new_string%

pause >nul
4

1 に答える 1

3

実際のコードによっては、遅延拡張を無効にして作業し、変更されたコンテンツへのアクセスが必要な場所で有効にしてから、再度無効にすることができます

@echo off
    setlocal enableextensions disabledelayedexpansion

    cd "C:\Files"
    for %%a in (*.txt) do (
        set "str=%%a"

        rem Option 1 
        echo file: %%a
        setlocal enabledelayedexpansion
        echo substring: !str:~0,3!
        endlocal 

        rem Option 2 - capture changed value to use inside non delayed expansion context
        setlocal enabledelayedexpansion
        for %%b in ("!str:~0,3!") do (
            endlocal
            echo %%a -- %%~b
        )
    )
于 2015-10-21T11:43:28.710 に答える