web-dev-qa-db-ja.com

Windowsバッチファイルで文字列を連結する方法は?

すべての.docファイルを;でリストしたいディレクトリがあります。

次のバッチコマンドがすべてのファイルをエコーすることを知っています。

for /r %%i In (*.doc) DO echo %%i

しかし、今度はそれらをすべて変数に入れ、間に;を追加して、一度にすべてをエコーし​​ます。
どうやってやるの?

set myvar="the list: "
for /r %%i In (*.doc) DO <what?>
echo %myvar%
71
Fortega

どうですか:

@echo off
set myvar="the list: "
for /r %%i in (*.doc) DO call :concat %%i
echo %myvar%
goto :eof

:concat
set myvar=%myvar% %1;
goto :eof
59
Rubens Farias

ルーベンスのソリューションに基づいて、環境変数の遅延展開を有効にする必要があります(「help setlocal」または「help cmd」と入力)、varがループで正しく評価されるようにします。

@echo off
setlocal enabledelayedexpansion
set myvar=the list: 
for /r %%i In (*.sql) DO set myvar=!myvar! %%i,
echo %myvar%

また、次の制限も考慮してください( MSDN ):

個々の環境変数の最大サイズは8192バイトです。

45
devio

変数@fnameまたは@extは単純に連結できることに注意してください。この:

forfiles /S /M *.pdf /C "CMD /C REN @path @fname_old.@ext"

すべてのPDFファイルの名前を「filename_old.pdf」に変更します

0
Pierre