我遇到了一些代码问题,我真的不知道如何描述它 但我可以解释什么不起作用
FOR /D /r "%cd%\files\" %%G in ("*") DO (
echo In folder: %%~nxG
set /a count=1
echo %%~fG
For /R "%%~fG" %%B in ("*.mp3") do (
call :subroutine "%%~nB"
) & echo. >>%archive%.txt
)
如果你想知道子程序的作用:
:subroutine
echo %count%:%1>>%archive%.txt
echo %count%: %1
set /a count+=1
GOTO :eof
我发现它没有读取第二个for循环中的%%~fG
。
有人可以帮助我。
我正在使用SETLOCAL EnableDelayedExpansion
提前谢谢。
答案 0 :(得分:1)
For /R "%%~fG" %%B in ("*.mp3") do (
可悲的是,for/r
无法使用变量作为dirname运行。
我建议
call :anothersubroutine "%%~fG"
和 :anothersubroutine 对于(“* .mp3”)中的/ R“%〜1”%% B(
set
%% ~fG变成一个变量并使用%var%
(没试过......)答案 1 :(得分:1)
不幸的是,您需要另一个子例程,因为选项在外部之前被解析为令牌。请检查以下示例:
@echo off
echo :::ATTEMPT 1:::
for %%a in (z) do (
rem the expected delimiter is z and result should be ++::%%a
for /f "delims=%%a tokens=1,2" %%A in ("++z%%%%az--") do echo %%A::%%B
)
echo :::ATTEMPT 2:::
for %%a in (z) do (
call :subr "%%~a"
)
exit /b
:subr
rem the expected delimiter is z and result should be ++::%%a
for /f "delims=%~1 tokens=1,2" %%A in ("++z%%%%az--") do echo %%A::%%B
输出是:
::: ATTEMPT 1 :::
++ž:: ZZ -
::: ATTEMPT 2 :::
++ :: %%一个
正如您在第一次尝试中看到的那样,%%a
符号被视为分隔符。但是子例程参数会立即被解析,因此可以使用它们。
要使代码正常工作,您可以尝试使用:
FOR /D /r "%cd%\files\" %%G in ("*") DO (
echo In folder: %%~nxG
set /a count=1
echo %%~fG
call ::innerFor "%%~fG"
)
...
exit /b %errorlevel%
:innerFor
For /R "%~1" %%B in ("*.mp3") do (
call :subroutine "%%~nB"
) & echo. >>%archive%.txt