web-dev-qa-db-ja.com

コマンドバッチで変数にディレクトリ名を割り当てる

スクリプトでさらに使用できるように、ファイル名を取得して変数に割り当てたいと思います。

set directoryName = dir Docum?nt*
echo %directoryName%

しかし、バッチファイルを実行すると、これしか得られません。

D:\ >a.bat
D:\ >set directoryName = dir Docum?nt*
D:\ >echo
ECHO is on.

変数に値(つまり、ディレクトリ名)が割り当てられていることを確認するには、次のスクリプトの記述を開始します。

ぼくの a.batに含まれるもの:

set directoryName=dir Docum?nt*
echo %directoryName%

スペースを削除した後:

D:\Workspace>set directoryName=dir Docum?nt*

D:\Workspace>echo dir Docum?nt*
dir Docum?nt*

おそらく、vairbaleには、結果の代わりにcommandキーワードとともに値全体が割り当てられています。出力はディレクトリ名、つまりDocumentationになるはずです。

5
Maven

変数の設定の等号の前後に空白があります。それを削除して、たとえば以下のメソッドを使用してください。

@ECHO ON

set directoryName=dir Docum?nt*
echo %directoryName%

間違っている

  • set directoryName = dir Docum?nt*

正しい

  • set directoryName=dir Docum?nt*enter image description here

暗黙のFORループ

FOR /F "TOKENS=*" %%F IN ('DIR /B /AD "Docum?nt*"') DO SET directoryName=%%~F

再帰的なFORループ

FOR /F "TOKENS=*" %%F IN ('DIR /B /AD /S "Docum?nt*"') DO SET directoryName=%%~F

その他のリソース

3
Pimp Juice IT

Docum?nt*に一致するディレクトリ名を設定する場合は、次のものが必要です。

for /d %%d in (Docum?nt*) do set directoryName="%%d"

複数のディレクトリがマスクと一致する場合、一致するのは1つだけです。一致するディレクトリのリストを保持する変数が必要な場合は、for /fを使用する必要があります。

4
AFH

場所がない。

名前にスペースを使用する必要がある場合は、次の形式にしてください。

set directoryName = "dir Docum?nt*"

""またはスペースなしのいずれかです。

3
Overmind

出力はディレクトリ名、つまりDocumentationになるはずです。

変数に保存したコマンドをrunしない限り、出力としてDocumentationを取得できません。

次のバッチファイル(test.cmd)を使用します。

@echo off
setlocal
set directoryName=dir Docum?nt*
rem run command
cmd /c %directoryName%
pause 
endlocal

出力例:

> test
dir Docum?nt*
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

09/03/2017  17:10    <DIR>          Documentation
               0 File(s)              0 bytes
               1 Dir(s)  1,701,065,842,688 bytes free

参考文献

  • Windows CMDコマンドラインのA-Zインデックス -すべての優れたリファレンス
  • cmd -新しいCMDシェルを起動し、(オプションで)コマンド/実行可能プログラムを実行します。
  • dir -ファイルとサブフォルダーのリストを表示します。
  • set -CMD環境変数を表示、設定、または削除します。 SETで行った変更は、現在のCMDセッションの期間中のみ保持されます。
2
DavidPostill