![](/img/trans.png)
[英]unable to assign output of FOR loop into another variable in a batch file
[英]unable to use for loop output to set variable in batch
我正在使用for循环访问带有一堆文件的文本文件及其目录,格式如下:
//srv/something/somethingelse/movie.mpg
//srv/something/somethingelse/movie2.mkv
//srv/something/somethingelse/movie3.mpg
//srv/something/somethingelse/movie4.mkv
我必须将.mpg和.mkv替换为.xml,然后将输出写到另一个文本文件中,我正在尝试这样做:
for /F "tokens=*" %%A in (%~dp0temporary\movies.txt) do (
set string=%%A
set find=.mkv
set replace=.xml
set string=%%string:!find!=!replace!%%
set find=.mpg
set string=%%string:!find!=!replace!%%
echo %string%>>%~dp0temporary\xml.txt
)
我想要的输出是这样的:
//srv/something/somethingelse/movie.xml
//srv/something/somethingelse/movie2.xml
//srv/something/somethingelse/movie3.xml
//srv/something/somethingelse/movie4.xml
但是我得到的是:
Echo is off.
Echo is off.
Echo is off.
Echo is off.
我已经搜索了一个多小时,但找不到任何有效的方法
这是重写的批处理代码,可从输入文件生成预期的输出。
@echo off
setlocal EnableDelayedExpansion
set "vidLoc=//srv"
set "resultLoc=c:"
del "%~dp0temporary\xml.txt" 2>nul
for /F "usebackq delims=" %%A in ("%~dp0temporary\movies.txt") do (
set "FileNameWithPath=%%A"
set "FileNameWithPath=!FileNameWithPath:.mkv=.xml!"
set "FileNameWithPath=!FileNameWithPath:.mpg=.xml!"
set "FileNameWithPath=!FileNameWithPath:%vidLoc%=%resultLoc%!"
echo !FileNameWithPath!>>"%~dp0temporary\xml.txt"
)
endlocal
用百分号括起来的所有环境变量引用在解析整个for块时已经扩展。 在执行命令时,只是将用感叹号括起来的环境变量引用进行扩展延迟。 这可以在打开命令提示符窗口并从那里运行批处理文件时看到,而没有将@echo off
放在顶部,或者将此行更改为@echo on
。
在命令提示符窗口中执行set /?
导致在几个窗口页面上获得此命令输出的帮助,在一个简单的示例中说明了for和if块的延迟扩展用法。
并在命令提示符窗口中运行for /?
打印帮助命令对到输出窗口。
仅替换文件扩展名,您还可以使用:
@echo off
del "%~dp0temporary\xml.txt" 2>nul
for /F "usebackq delims=*" %%A in ("%~dp0temporary\movies.txt") do (
echo %%~dpnA.xml>>"%~dp0temporary\xml.txt"
)
但是此更快的代码还将所有正斜杠/
更改为反斜杠\\
因为反斜杠字符是Windows上的目录分隔符。
Mofi是正确的:将带有setlocal enabledelayedexpansion
的行移出(
括号)
包含的任何代码块。
但是,请尝试使用命令行自变量(参数)修饰符~
下一种方法:
@ECHO OFF >NUL
@SETLOCAL enableextensions
for /F "tokens=*" %%A in (%~dp0temporary\movies.txt) do (
rem full_path=%%~dpnA
rem extension=%%~xA
echo %%~dpnA.xml
)>%~dp0temporary\xml.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.