我们有一个列出一堆路径的文本文件,以及一个从该文件中读取行的批处理文件.
例如,TargetFolders.txt可能包含以下行:
%ProgramFiles%\Acme\FooBar %VersionNumber%
Run Code Online (Sandbox Code Playgroud)
当然,当我们从文本文件中读取这一行时(使用FOR命令),变量%% I接收实际行文本,使用%符号而不是替换变量值.所以,
SET VersionNumber=7.0
FOR /F "eol=; delims=" %%I IN (TargetFolders.txt) DO (
echo Folder: %%I
)
Run Code Online (Sandbox Code Playgroud)
打印
Folder: %ProgramFiles%\Acme\FooBar %VersionNumber%
Run Code Online (Sandbox Code Playgroud)
如何使它替换实际的变量值,以便打印
Folder: C:\Program Files\Acme\FooBar 7.0
Run Code Online (Sandbox Code Playgroud)
?
这段代码
@echo off
setlocal EnableDelayedExpansion
set myvar=first
set first=second
echo myvar:!myvar!
set myvar=!myvar!
echo myvar:!myvar!
Run Code Online (Sandbox Code Playgroud)
给
myvar:first
myvar:first
Run Code Online (Sandbox Code Playgroud)
在Windows Vista SP2上.
我预期的输出是
myvar:first
myvar:second
Run Code Online (Sandbox Code Playgroud)
为什么差异以及如何获得理想的效果?
我使用下面的代码,以便从收集器文本文件的前4个字符的值创建一个目录
@echo off & setlocal enabledelayedexpansion
:loop
set /P txt_file=<Collector.txt
Set collector_id=!txt_file:~0,4!
:: check for existence of [OutputFolder]
:: if [OutputFolder] doesn't exist, create it
if not exist %collector_id% (
echo folder %collector_id% not found
echo creating folder %collector_id%
md %collector_id%
)
xcopy *.txt %collector_id% /v
Del *.txt
goto loop
Run Code Online (Sandbox Code Playgroud)
我想连续执行上面的循环,以检查当前目录是否为空.如果不是我想制作一个目录,如果不存在,名称为collector.txt的前4个字符.
如果目录不为空,一切正常.当上面循环并且我将collector.txt添加到当前目录时,collector_id不会改变.
我哪里错了?
有没有其他方式,期望无限循环来做到这一点?