10代と話して驚いたこと

バッチファイルのあるフォルダー内の


x64_AppleApplicationSupport_icudt*.dll
(*には49や55などの数値が入る)
(このファイルはフォルダー内に一つしか存在しない)
というファイルを検索して
得られたファイル名の
icudt*.dll
という部分だけを変数に格納したいと考えています。


ネット上で検索して


@echo off


cd /d %~dp0


SET path1="x64_AppleApplicationSupport_"



setlocal enabledelayedexpansion

for /F %%A in ('dir %path1%"icudt*.dll" /B') do (
set path3="%%A"
)

endlocal


call set path4=%path3:x64_AppleApplicationSupport_=%

echo %path4%


というコードでいけると思うのですが
x64_AppleApplicationSupport_=
という文字列が代入されてしまいます。



call set path4=%path1:x64_AppleApplicationSupport_=Apple%

echo %path4%

というコードだとうまくいくので、
どうもdirでファイル名をうまくセットできていないように思います。

これはどうすれば良いでしょうか?

質問者からの補足コメント

  • ありがとうございます。

    この方法でうまくいきました。

    このご回答ではスプリットする方法を教えてくださったのですが
    今後の応用のために
    x64_AppleApplicationSupport_という文字列を置換して削除する方法も教えていただけないでしょうか?

    もっと複雑なコードになるのでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/06/14 17:35
  • ありがとうございます。

    解決しました。

    No.4の回答に寄せられた補足コメントです。 補足日時:2016/06/14 22:00

A 回答 (5件)

No.2です。

こちらの方が汎用性がありました。


setlocal enabledelayedexpansion

set PATH1=x64_AppleApplicationSupport_

for /F "usebackq" %%A in (`dir %PATH1%icudt*.dll /B`) do (
set PATH3=%%A
)

echo %PATH3%

set PATH4=!PATH3:%PATH1%=!

echo %PATH4%

endlocal
この回答への補足あり
    • good
    • 0

他の回答者さんの回答を見ていて思ったのでですが、


質問者さんのコード通りにいくと、
path3やら4には1つのファイルの名前しか入らないことは分かってらっしゃいますか?

それともファイルが1つしかない前提なのでしょうか?
少なくとも質問本文から推測するに複数ファイルがあるようですが……。
    • good
    • 0

No.2です。



> x64_AppleApplicationSupport_という文字列を置換して削除する方法も教えていただけないでしょうか?

置換の方法自体は、質問文の中でご提示の方法で良いと思います。
forコマンドに一部修正することでできます。
※dirコマンドの両側は、シングルクォートではなくて、バッククォート(Shift+@)になります。



set PATH1=x64_AppleApplicationSupport_

for /F "usebackq" %%A in (`dir %PATH1%icudt*.dll /B`) do (
set PATH3=%%A
)

echo %PATH3%

set PATH4=%PATH3:x64_AppleApplicationSupport_=%

echo %PATH4%
    • good
    • 0

こんな感じでどうでしょう。



set PATH1=x64_AppleApplicationSupport_

rem dirコマンドで取得した文字のうち、
rem '_'で分割した3つめの文字列を%%iとする。
for /F "usebackq tokens=3 delims=_" %%A in (`dir %PATH1%icudt*.dll /B`) do (
set PATH3=%%A
)

echo %PATH3%
この回答への補足あり
    • good
    • 0

たぶんこうかなと思いますけどど



――――――――――――――ここから―――――――――――――――
@echo off
setlocal enabledelayedexpansion

cd /d %~dp0

SET jogai=x64_AppleApplicationSupport_

rem for /F %%A in ('dir "%jogai%icudt*.dll" /B') do (
for /f "usebackq delims=" %%A in (`dir /b "%jogai%icudt*.dll" /a-d`) do (
set fileName=%%A
echo !fileName!
set newFileName=!fileName:%jogai%=!
echo !newFileName!
set newPath=!newpath! "!newFileName!"
echo -----
)


rem 先頭一文字(半角スペース)削除
set newpath=%newpath:~1%

echo newPath
echo !newpath!

pause
exit

――――――――――――――ここまで―――――――――――――――

以上
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報