90361


バッチファイルにて、あるフォルダ下にあるフォルダを順次カレントフォルダにしてコマンドを実行しようとしています。しかし、cdコマンド時点で失敗しているようです。

以下バッチファイル

[code]

    @echo off
    set CURRENT_DIR=%~dp0
    set MY_PACKAGE_DIR=%CURRENT_DIR%my_project\
    
    cd  %MY_DIR%
    set MY_DIR=%CD%
    
    for /d %%A in (*.*) do (
        echo %%A%
        echo %MY_DIR%\%%A\
        cd %MY_DIR%\%%A\
        echo %CD%
    )
    
    
[/code]

[code]

    echo %MY_DIR%\%%A\
    
[/code]

における表示は、フルパスで該当フォルダを示しています。  
しかし、cdコマンドでは失敗しており、echoで表示されるディレクトリは、MY_DIRです。

cdの前段で以下のコマンドを入れると、setで失敗しているらしく、echo文ではECHO is offと表示されます。

[code]

    set T_DIR=%MY_DIR%\%%A\
    echo %T_DIR%
    
[/code]

for文で代入した変数を使用して、cdコマンドを成立させるにはどうすればよいのでしょうか？

# 追記

このような記事を見つけました。  
for文内で、cdやsetを実行した際に、for文を抜けてから反映されるようで、根本的に使い物にならない？のでしょうか？

[batファイルでfor文内に変数を利用する場合の罠](https://blog.natade.net/2018/10/06/windows-
bat-%E9%81%85%E5%BB%B6%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0-for-if/#toc2)


CC BY-SA 4.0
2022-08-03T03:00:41.133
90353
2022-08-03T06:33:17.807
2022-08-03T03:59:56.650
32891
32891
question
batch-file
Windowsバッチファイルで検索したフォルダへcdコマンドしたい。


`for`の中では`cd %MY_DIR%\%%A\`は成功していて、失敗しているのは`echo %CD%`のようですね。  
同様に`set T_DIR=%MY_DIR%\%%A\`は成功していて、失敗しているのは`echo %T_DIR%`のようです。

コマンドプロンプトからバッチファイルを実行して、終了した後のカレントディレクトリを見るとディレクトリの移動は行われています。

なので参照記事に書いてあるように、バッチファイルのなるべく先頭に`setlocal
EnableDelayedExpansion`を、なるべく最後に`endlocal`を挿入して、`echo %CD%`を`echo !CD!`、`echo
%T_DIR%`を`echo !T_DIR!`とすれば良いと思われます。


CC BY-SA 4.0
2022-08-03T06:33:17.807
90361
2022-08-03T06:33:17.807
26370
90353
answer