ну, в моей системе есть проблема с вашим пакетным скриптом, который я опишу, но я не знаю, почему ваш w пуст после запуска, но если вы удалите @echo off, вы сможете увидеть, что происходит. и из этого объяснения, может быть, мы увидим, почему он пуст. Должно быть, последний параметр w устанавливает его на ноль.
@echo off
for /r %%f in (*.bat) do (
set w=%%~nxf
echo %w%
)
pause
Выше проблема в том, что вы используете %...%
в цикле for, и то, что происходит с %var%
в цикле for, например %w%
в пакетных файлах, очень странно по сравнению с любым другим языком! %w%
будет заменен на %w%
, и не после этого.
Вы можете попытаться проверить это, выполнив команду set w = abcdefg, затем запустите ваш пакетный файл и посмотрите, не является ли w тем же.
Но на моем компьютере, после того, как он запустится, установите w=%%~nxf
и затем у вас есть эхо %w%
что %w%
там в эхо, затем установите текущее значение %%~nxf
, которое является вашим первым файл летучей мыши. И это все. Так и остается. Это не то, что вы намерены, без сомнения, но это то, что происходит.
Вот ваш файл bat, который я удалил @echo off.
for /r %%f in (*.bat) do (
set w=%%~nxf
echo %w%
)
Вот вывод, показывающий, что происходит, что я и описал. % W% сохраняет свое первое значение.
C:\crp>spo <Return>
C:\crp>for /R %f in (*.bat) do (
set w=%~nxf
echo spo2.bat
)
C:\crp>(
set w=a.bat
echo spo2.bat
)
spo2.bat
C:\crp>(
set w=b.bat
echo spo2.bat
)
spo2.bat
C:\crp>(
set w=spo.bat
echo spo2.bat
)
spo2.bat
C:\crp>(
set w=spo2.bat
echo spo2.bat
)
spo2.bat
C:\crp>
Вам нужно добавить setlocal .... и заменить% var% на!вар! тогда вы получите нормальное поведение!
@echo off
setlocal enableextensions enabledelayedexpansion
for /r %%f in (*.bat) do (
set w=%%~nxf
echo !w!
)
C:\crp>spo2
a.bat
b.bat
spo.bat
spo2.bat
C:\crp>