繁体   English   中英

无法用于循环输出以批量设置变量

[英]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 /? 导致在几个窗口页面上获得此命令输出的帮助,在一个简单的示例中说明了forif块的延迟扩展用法。

并在命令提示符窗口中运行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM