БАТ/КМД. Например, этот цикл выводит все текстовые файлы из папки.
@echo off
FOR %%a IN (C:\myfolder\*.txt) DO echo %%a
pause
Вне:
C:\myfolder\4234.txt
C:\myfolder\out88888.txt
C:\myfolder\tmp01.txt
C:\myfolder\tmp2.txt
Как изменить цикл, чтобы пути записывались в переменные? Эти переменные следует использовать ниже в скрипте.
var1 = C:\myfolder\4234.txt
var2 = C:\myfolder\out88888.txt
var3 = C:\myfolder\tmp01.txt
var4 = C:\myfolder\tmp2.txt
Не знаю что тут написать, просто спрашиваю)
Вы можете использовать enabledelayedexpansion
@echo off
setlocal enabledelayedexpansion
set #N=0& FOR %%A IN (C:\myfolder\*.txt) DO set /a #N+=1& set "var!#N!=%%~fA"
set var
pause
@echo off
setlocal enabledelayedexpansion
set #N=0
FOR %%A IN (C:\myfolder\*.txt) DO (
set /a #N+=1
set "var!#N!=%%~fA"
)
set var
pause
set var
чтобы показать все вариантыset var2
, чтобы показывать только var2
или Echo %var2%
, например
Я бы подумал об этом, не полагаясь на расширение отложенной переменной.
@Echo Off
SetLocal EnableExtensions
Set "DirPath=C:\myfolder"
Set "FileExt=.txt"
For /F "Delims= = " %%G In ('(Set var^) 2^>NUL') Do Set "%%G = "
For /F "Tokens=1,* Delims=:" %%G In ('
Set "PathExt = " ^&
%SystemRoot%\System32\where.exe "%DirPath%":"*%FileExt%" 2^>NUL ^|
%SystemRoot%\System32\findstr.exe /NR "$"
') Do Set "var%%G=%%H"
(Set var) 2>NUL && Pause
Первый цикл For
предназначен для того, чтобы гарантировать, что у вас еще нет переменных с именем Begin var
. Последняя строка включена только для того, чтобы показать вам любые именованные переменные, определенные во втором цикле, вместе с соответствующими значениями.
Я разделил второй цикл var
выше на несколько строк для удобства чтения. Если хотите, вы можете соединить эти пять строк в одну.
@Echo Off
SetLocal EnableExtensions
Set "DirPath=C:\myfolder"
Set "FileExt=.txt"
For /F "Delims= = " %%G In ('(Set var^) 2^>NUL') Do Set "%%G = "
For /F "Tokens=1,* Delims=:" %%G In ('Set "PathExt = " ^& %SystemRoot%\System32\where.exe "%DirPath%":"*%FileExt%" 2^>NUL ^| %SystemRoot%\System32\findstr.exe /NR "$"') Do Set "var%%G=%%H"
(Set var) 2>NUL && Pause
Предлагаю вам просмотреть этот ответ