web-dev-qa-db-de.com

Wie verketten Sie Strings in einer Windows-Batchdatei?

Ich habe ein Verzeichnis, für das ich alle .doc-Dateien mit einem ; auflisten möchte.

Ich kenne den folgenden Stapelbefehl, der alle Dateien wiedergibt:

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

Aber jetzt möchte ich sie alle in eine Variable setzen, einen ; dazwischen einfügen und sie alle gleichzeitig wiedergeben.
Wie kann ich das machen?

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

Wie wäre es mit:

@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
58
Rubens Farias

Basierend auf der Lösung von Rubens müssen Sie die verzögerte Erweiterung von Umgebungsvariablen aktivieren (Typ "help setlocal" oder "help cmd"), damit die Variable in der Schleife richtig ausgewertet wird:

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

Beachten Sie auch die folgende Einschränkung ( MSDN ):

Die maximale individuelle Umgebung Variable Größe beträgt 8192 Bytes.

44
devio

Beachten Sie, dass die Variablen @fname oder @ext einfach verkettet werden können. Diese:

forfiles /S /M *.pdf /C "CMD /C REN @path @[email protected]"

benennt alle PDF -Dateien in "Dateiname_alt.pdf" um

0
Pierre