好。我摆脱了大部分无用的代码,并且一直在修补它,试图找到问题所在,我想我终于找到了它:
Windows'Batch无法编辑将在FOR
循环内扩展的变量。
例如:
set /a x=1
Powershell Get-Clipboard> %temp%\ffmpeglist.txt
setlocal enableExtensions enableDelayedExpansion
for /F "delims=| tokens=*" %%A in (%temp%\ffmpeglist.txt) do (
set input[!x!]=%%A
call echo !input[%x%]!
set /a x += 1
)
endlocal
预期行为:
g:\videos\youtube1.mp4
g:\videos\youtube2.mp4
g:\videos\youtube3.mp4
g:\videos\youtube4.mp4
g:\videos\youtube5.mp4
我得到了什么:
g:\videos\youtube1.mp4
g:\videos\youtube1.mp4
g:\videos\youtube1.mp4
g:\videos\youtube1.mp4
g:\videos\youtube1.mp4
无论我做什么,set /a x+= 1
都不会更改x
的值。
有解决方案吗?我对任何事都持开放态度。
答案 0 :(得分:1)
修改强>
在重大改变的批次中(实际上是一个新问题)改变
call echo !input[%x%]!
到
call echo %%input[!x!]%%
如果在(代码块)中,您可能需要延迟扩展以强制实际值, 如果同时使用索引变量,您需要另一级延迟扩展,您可以通过伪调用和双倍百分号来完成
Call set Input=%%input[!x!]%%
mediainfo --Output=Video;%%Height%% !input! > %temp%\ffmpegres%x%.txt
答案 1 :(得分:0)
感谢@Aacini和@LotPings,我得到了答案:
set /a x=1
Powershell Get-Clipboard> %temp%\ffmpeglist.txt
setlocal enableDelayedExpansion
for /f "delims=|" %%A in (%temp%\ffmpeglist.txt) do (
set input[!x!]="%%A"
for %%i in (!x!) do echo !input[%%i]!
set /a x =+ 1
)
问题不是BATCH无法
编辑将在
FOR
循环内部扩展的变量。
但它是以一种不太直接的方式做到的。