web-dev-qa-db-ja.com

.batファイルで変数を2パーセントで部分文字列化する

.batファイルを実装しようとして問題が発生しましたが、答えが見つかりませんでした。システムパスなしですべてのフォルダ名を表示しようとしています。

私はそのようなことを試しましたが、うまくいきません。

@echo off
set back=%cd%
for /d %%I in (C:\test\test*) do (
    cd %%I 2>&1 >nul
    echo %%~nxI:~10,5
)
cd %back% 2>&1 >nul

解決策はありますか? :-)

2
NicoFC34

あなたの答えをありがとう。これが私のために働いた解決策です:

@echo off

setlocal EnableDelayedExpansion

for /d %%I in (C:\test\testV*) do (     
    set current_folder=%%I
    set test_version=!current_folder:~12,6!
    set test_version=!test_version:_=.!

    echo !current_folder!
    echo !test_version!
)
0
NicoFC34

部分文字列は通常の変数でのみ機能し、メタ変数では機能しません。
コンテンツを変数にコピーします。これは(コードブロック)内にあるため、必要です DelayedExpansion
疑似呼び出しメソッドの使用:

:: Q:\Test\2018\07\26\SU_1345000.cmd
@echo off
PushD .
for /d %%I in (A:\test\test*) do (
    Set "Dir=%%I"
    Call echo %%Dir:~10,5%%
)
PopD

このようなツリーでは:

> tree 
└───test
    ├───test1
    ├───test2
    └───test3

それが戻る

> Q:\Test\2018\07\26\SU_1345000.cmd
st1
st2
st3

オフセットが正しくなかった可能性があります。

1
LotPings

dir /ad /b C:\test\test*を使用できます

@echo off
set back=%cd%
for /d %%I in (C:\test\test*) do (
    dir /ad /b %%I
)
cd %back% 2>&1 >nul

このスクリプトは、フォルダー内のすべてのフォルダー名を出力しますC:\test\test*

0
chloesoe