获取 .txt 的内容 - 批量处理 for 循环中的文件

Get content of .txt - file in a for-loop in batch

我正在使用批处理文件搜索某些文件,[0-9]_xxx.xyz,并从它们的路径中提取子字符串。我想将这些子字符串放在我的 Oracle 数据库中的 table 中。

这是我的代码中执行上述任务的部分:

FOR /F "tokens=7,8,9,* delims=\" %%a in ('dir /B /S /A:-D "*_xxx.xyz"') do (
    @echo insert into tab (a,b,c,d,e^) values ('0','%%a','%%c','%%~dpd%%a\%%b\%%c','Content xxx.txt'^); | sqlplus USER/PW@DB
)

我的问题是在循环中获取 .txt 文件的内容,(总是一行),并将其放入行 e在我的 test_tab 中。 .txt 文件位于 %%~dpd%%a\%%b\%%c\xxx.txt,每个目录始终只有一个 .txt 文件,[0-9]_xxx.xyz 也位于该目录中。

目录结构:

C:\Users\myuser\Desktop\Input\object_group01_object01_module_name01_module.BAT_TEMPLATE
C:\Users\myuser\Desktop\Input\object_group01_object01_module_name01_module.txt

如果第一个文件存在,我需要将它的数据写入数据库。我需要 .txt 文件的单行内容在我的 table 的字段中

我的数据库中的一行 table 必须如下所示:

0 || object_group || 1001_object || source (whole path c:\...\1001_module_name || first line of txt   

1001只是一个例子,每个模块递增。

有没有办法把.txt的内容放到一个变量中,然后放到数据库中?

我可能会尝试在 PowerShell 中编写此代码,但如果您决定使用批处理脚本,那么这应该可以帮助您:

@echo off
setlocal enabledelayedexpansion

for /f "usebackq delims=" %%f in (`dir /s /b /a:-d *_xxx.xyz`) do (
    set filename=%%f
    echo !filename!
    echo.
    set break=
    for /f "usebackq delims=" %%l in ("!filename!") do if not defined break (
        set line=%%l
        set break=yes
    )
    for /f "usebackq tokens=7,8,9,* delims=\" %%a in ('!filename!') do (
        set "sql=insert into tab (a,b,c,d,e^) values ('0','%%a','%%c','%%~dpd%%a\%%b\%%c','!line!'^);"
        echo !sql!
    )
)

此处,for /f "usebackq delims=" %%l in ("!filename!")读取文件line-wise。 usebackq 和双引号围绕 !filename! 的组合确保带空格的路径不会导致错误。

do if not defined break 在第一次迭代后停止循环,即它只读取一行。既然你说你的文件只包含一行,那么它更像是一种预防措施。

第三个循环然后将路径拆分为多个部分,这就是您已有的循环。