相关疑难解决方法(0)

Windows批处理编程:间接/嵌套变量评估

我们有一个列出一堆路径的文本文件,以及一个从该文件中读取行的批处理文件.

例如,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)

windows command-line batch-file

5
推荐指数
2
解决办法
5260
查看次数

为什么批处理文件中的延迟扩展在这种情况下不起作用?

这段代码

@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)

为什么差异以及如何获得理想的效果?

windows batch-file

3
推荐指数
1
解决办法
6278
查看次数

如何在批处理中更改循环内的变量值

我使用下面的代码,以便从收集器文本文件的前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不会改变.

我哪里错了?

有没有其他方式,期望无限循环来做到这一点?

variables loops batch-file

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

batch-file ×3

windows ×2

command-line ×1

loops ×1

variables ×1