CMD从文件中获取字符串并将其设置为要在cd中使用的变量

Ric*_*man 5 cmd batch-file

我是批处理文件的新手,我正在尝试写一个来完成我的工作(我知道懒得正确)

到目前为止,我有以下......

SET skip=1

REM for all the directories indicated to contain core repositories
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO ( 
SET TgtDir =%%i
echo %TgtDir% >> C:\result.txt
)
Run Code Online (Sandbox Code Playgroud)

Repos.txt的内容是:

60000
C:\somedir\someotherdir\
C:\a\b\c\
Run Code Online (Sandbox Code Playgroud)

基本上我希望这个脚本通过一个文件,忽略将在稍后用于延迟设置的第一行,然后提取每一行然后(理想情况下)将它传递给cd命令但是现在我只是试图获取它进入变量TgtDir.

当我运行此脚本时,C:\ result.txt中的输出是:

ECHO is on.
ECHO is on.
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

Jon*_*hop 10

您需要查看批处理文件的EnableDelayedExpansion选项.从上述链接:

使用FOR循环时,延迟变量扩展通常很有用.通常,整个FOR循环被评估为单个命令,即使它跨越批处理脚本的多行.

所以你的脚本最终看起来像这样:

@echo off
setlocal enabledelayedexpansion
SET skip=1

REM for all the directories indicated to contain core repositories
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO (
    SET TgtDir=%%i
    echo !TgtDir! >> C:\result.txt
)
Run Code Online (Sandbox Code Playgroud)

作为替代方案,只需%%i在内循环中使用变量,而不是创建新变量.