【问题标题】:batch : Substring in loop with 2 variables批处理:带有 2 个变量的循环中的子字符串
【发布时间】:2015-05-10 09:51:22
【问题描述】:

我有一个循环遍历文件,获取实际文件名(不包括整个路径)并尝试检查该文件名是否存在于某个列表中。 我的代码是:

setlocal enabledelayedexpansion enableextensions
for /R %%j in (*.c) do (
set MYVAR=%%j
set actualFileName=%%~nj
if NOT "%MY_FILE_LIST%"=="!MY_FILE_LIST:%actualFileName%=!" set "TOCOMPILE=!TOCOMPILE! %MYVAR%"

此代码不起作用,因为实际文件名是使用 % 而不是 ! 访问的。 但是 !MYVAR:~!actualFileName!!也不行。 我该怎么办?

【问题讨论】:

标签: batch-file for-loop


【解决方案1】:

您可以直接使用for可替换的参数修饰符来获取需要的信息

for /r %%j in (*.c) do (
    echo actualFileName is %%~nj
)

其中%%~nj%%j 中引用的文件的名称,不带扩展名。完整列表见for /?

编辑以适应 cmets

setlocal enableextensions enabledelayedexpansion

for /r %%j in (*.c) do (
    if not "!MY_FILE_LIST:%%~nj!"=="%MY_FILE_LIST%" (
        set "TOCOMPILE=!TOCOMPILE! "%%~fj""
    )
)

如果没有文件在其名称中包含感叹号,这应该可以完成工作。如果这不能保证

setlocal enableextensions disabledelayedexpansion
for /r %%j in (*.c) do (
    setlocal enabledelayedexpansion
    if not "!MY_FILE_LIST:%%~nj!"=="%MY_FILE_LIST%" (
        for /f "delims=" %%a in ("!TOCOMPILE! ") do (
            endlocal
            set "TOCOMPILE=%%a"%%~fj""
        )
    ) else endlocal
)

【讨论】:

  • 谢谢你!但我现在的问题是下一步。我已经编辑了问题。
【解决方案2】:
setlocal enabledelayedexpansion enableextensions
for /R %%j in (*.c) do (
 set MYVAR=%%j
 set lastIndex= some calculation to find last index of /


 for /f "tokens=* delims=" %%# in ("!lastIndex!") do (
    set actualFileName=!MYVAR:~%%#!
 )

)

使用另一个嵌套的 FOR

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多