スクリプトでさらに使用できるように、ファイル名を取得して変数に割り当てたいと思います。
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
になるはずです。
変数の設定の等号の前後に空白があります。それを削除して、たとえば以下のメソッドを使用してください。
@ECHO ON
set directoryName=dir Docum?nt*
echo %directoryName%
間違っている
set directoryName = dir Docum?nt*
正しい
暗黙の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
Docum?nt*
に一致するディレクトリ名を設定する場合は、次のものが必要です。
for /d %%d in (Docum?nt*) do set directoryName="%%d"
複数のディレクトリがマスクと一致する場合、一致するのは1つだけです。一致するディレクトリのリストを保持する変数が必要な場合は、for /f
を使用する必要があります。
場所がない。
名前にスペースを使用する必要がある場合は、次の形式にしてください。
set directoryName = "dir Docum?nt*"
""またはスペースなしのいずれかです。
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