使用 Windows Batch 在多台 PC 上修改 INI 文件中的特定设置 任务的批处理文件代码顶部定义的文件相关变量主要代码说明INI 文件更新例程的要求示例文件集样本文件集的结果INI文件更新例程说明附加信息

如何解决使用 Windows Batch 在多台 PC 上修改 INI 文件中的特定设置 任务的批处理文件代码顶部定义的文件相关变量主要代码说明INI 文件更新例程的要求示例文件集样本文件集的结果INI文件更新例程说明附加信息

我的目标是使用外部 PC 列表通过网络在多台 PC 上修改 INI 文件中的单个设置,并将结果输出到日志文件。

  • 需要是一个 Windows 批处理文件。网络被锁定,无法运行 PS 等脚本。
  • 安全性不是问题,因为读/写访问在我的级别对所有目标 PC 都是开放的。
  • 要修改的 INI 文件的内容是 PC 独有的,因此无法进行全面覆盖/复制。
  • 在 INI 中删除或添加空行不是问题。
  • 文件 PCList.txt 可以包含 1-100 个 PC 名称或 IP,每行一个。
  • 输出到带有 PCNAME: 'Success' or 'Fail' 的日志文件

到目前为止,我已经找到并修改了一个可以在本地编辑文件的脚本,但无法让它与 FOR/DO 循环一起工作来处理列表中每台 PC 的操作 - 或者 - 添加日志输出

@Echo Off
SetLocal EnableDelayedExpansion

Set _PathtoFile=C:\Test\Sample.ini
Set _OldLine=Reboot=
Set _NewLine=Reboot=1

Call :_Parse "%_PathtoFile%"
Set _Len=0
Set _Str=%_OldLine%
Set _Str=%_Str:"=.%987654321

:_Loop
If NOT "%_Str:~18%"=="" Set _Str=%_Str:~9%& Set /A _Len+=9& Goto _Loop
Set _Num=%_Str:~9,1%
Set /A _Len=_Len+_Num
PushD %_FilePath%
If Exist %_FileName%.new Del %_FileName%.new
If Exist %_FileName%.old Del %_FileName%.old
Set _LineNo=0
For /F "Tokens=* Eol=" %%I In (%_FileName%%_FileExt%) Do (
    Set _tmp=%%I
    Set /A _LineNo+=1
    If /I "!_tmp:~0,%_Len%!"=="%_OldLine%" (
        >>%_FileName%.new Echo %_NewLine%
    ) Else (
        If !_LineNo! GTR 1 If "!_tmp:~0,1!"=="[" Echo.>>%_FileName%.new
        SetLocal DisableDelayedExpansion
        >>%_FileName%.new Echo %%I
        EndLocal
    ))
Ren %_FileName%%_FileExt% %_FileName%.old
Ren %_FileName%.new %_FileName%.ini
PopD
Goto :EOF

:_Parse
Set _FilePath=%~dp1
Set _FileName=%~n1
Set _FileExt=%~x1
Goto :EOF

这里是示例文件:Settings.ini

[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=0
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567

PCList.txt

MY-PC
YOUR_PC
NETSERVER
192.168.10.100

仍然试图让我的头脑围绕这个脚本所做的一切 - 这是技术答案中提供的唯一信息(初始脚本的来源) 它通过使用 .old 扩展名重命名来保留原始文件 它将删除所有空行,但会在任何以 [ 开头的行之前插入一个空行(除非它是文件中的第一行)

如果文件中的旧行有尾随空格,我会得到指定搜索行的长度。
如果多于一行以旧行文本开头,它也会被更改。例如,如果文件有以下几行: test=line1 test=line1 并且您将 _OldLine 设置为 test=line1,则这两行都将被更改。
如果这可能是个问题,
更改这一行:
如果 /I "!_tmp:~0,%_Len%!"=="%_OldLine%" (
对此:
如果 /I "!_tmp!"=="%_OldLine%" (
请记住,如果文件中的旧行有尾随空格,除非您将它们包含在 _OldLine 变量中,否则不会更改

此时我需要做的主要事情是使用上述脚本执行此操作...或类似的内容,在外部 TXT 文件中列出的 PC 列表中 - 通过网络。我愿意接受其他方法,前提是它们是 Windows 批处理脚本,并且不包括调用外部应用程序。

愿望清单,(目前不需要)

  • 能够在发现被修改设置的 INI 中指定或设置 [SECTION],在同一个 INI 的多个部分中可以找到相同的设置(不是我最初需要的情况,但我可以预见未来会如此)

解决方法

任务的批处理文件代码

我建议使用以下代码:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SectionName=[SAMPLE SETTINGS]"
set "EntryName=Reboot"
set "EntryValue=1"
set "LogFile=%~dpn0.log"
set "TempFile=%TEMP%\%~n0.tmp"
set "ListFile=%~dp0PCList.txt"

if not exist "%ListFile%" (
    echo ERROR: List file %ListFile%" not found.>"%LogFile%"
    goto EndBatch
)

del /A /F "%LogFile%" 2>nul
for /F "usebackq delims=" %%I in ("%ListFile%") do call :UpateIniFile "\\%%I\C$\Test\Sample.ini"
goto EndBatch

:UpateIniFile
if not exist %1 (
    echo File not found:   %1>>"%LogFile%"
    goto :EOF
)
set "EmptyLines="
set "EntryUpdate="
set "CopyLines="
(for /F delims^=^ eol^= %%I in ('%SystemRoot%\System32\findstr.exe /N "^" %1 2^>nul') do (
    set "Line=%%I"
    setlocal EnableDelayedExpansion
    if defined CopyLines (
        echo(!Line:*:=!
        endlocal
    ) else if not defined EntryUpdate (
        echo(!Line:*:=!
        if /I "!Line:*:=!" == "!SectionName!" (
            endlocal
            set "EntryUpdate=1"
        )
    ) else (
        if /I "!Line:*:=!" == "!EntryName!=!EntryValue!" (
            endlocal
            goto ValueExists
        )
        if "!Line:*:=!" == "" (
            endlocal
            set /A EmptyLines+=1
        ) else (
            set "Line=!Line:*:=!"
            if "!Line:~0,1!!Line:~-1!" == "[]" (
                echo !EntryName!=!EntryValue!
                if defined EmptyLines for /L %%J in (1,1,!EmptyLines!) do echo(
                echo !Line!
                endlocal
                set "EntryUpdate=3"
                set "CopyLines=1"
            ) else (
                if defined EmptyLines for /L %%L in (1,!EmptyLines!) do echo(
                for /F delims^=^=^ eol^= %%J in ("!Line!") do (
                    if /I not "%%~J" == "!EntryName!" (
                        echo !Line!
                        endlocal
                    ) else (
                        echo !EntryName!=!EntryValue!
                        endlocal
                        set "EntryUpdate=2"
                        set "CopyLines=1"
                    )
                )
                set "EmptyLines="
            )
        )
    )
))>"%TempFile%"

if not defined EntryUpdate (
    >>"%TempFile%" echo %SectionName%
    >>"%TempFile%" echo %EntryName%=%EntryValue%
    set EntryUpdate=4
)
if %EntryUpdate% == 1 (
    >>"%TempFile%" echo %EntryName%=%EntryValue%
    set "EntryUpdate=3"
)

move /Y "%TempFile%" %1 2>nul
if errorlevel 1 (
    echo Failed to update: %1>>"%LogFile%"
    del "%TempFile%"
    goto :EOF
)

if %EntryUpdate% == 2 (
    echo Value updated in: %1>>"%LogFile%"
    goto :EOF
)
if %EntryUpdate% == 3 (
    echo Entry added to:   %1>>"%LogFile%"
    goto :EOF
)
if %EntryUpdate% == 4 (
    echo Section+entry to: %1>>"%LogFile%"
    goto :EOF
)

:ValueExists
echo Value existed in: %1>>"%LogFile%"
del "%TempFile%"
goto :EOF

:EndBatch
endlocal

顶部定义的文件相关变量

日志文件在批处理文件的目录中创建,批处理文件名为批处理文件,但文件扩展名为 .log

临时文件是在本地计算机上为具有批处理文件名但文件扩展名为 .tmp 的临时文件的目录中创建的。

包含计算机名称或 IP 地址的列表文件必须位于批处理文件目录中的 PCList.txt

主要代码说明

对于列表文件中不以 ; 开头的每一行,第一个 FOR 循环调用具有 INI 文件完整文件名的子例程,以使用适当的 UNC 路径进行更新。行首的分号可用于注释掉计算机名称或 IP 地址。

INI 文件更新例程的要求

编写子程序以满足以下要求:

  1. 如果 INI 文件已经包含要在正确部分中使用正确值更新的条目,则该子例程不应修改该 INI 文件。如果文件内容根本没有被真正修改,我不喜欢它设置存档属性和修改文件的最后修改日期。
  2. 它应该替换正确部分中与批处理文件顶部定义的值不同的条目的值。
  3. 如果该部分已经存在,但尚未包含该条目,则应将具有所需值的条目添加到该部分。该条目应添加在该部分的最后一个非空行之后。
  4. 如果文件根本不包含该部分,则应在文件末尾添加该部分和具有所需值的条目。

编写子例程是为了保留文件中的所有空行,如果只有条目或节和条目必须附加在文件末尾,则文件末尾的空行除外。它不会添加空行。可以增强它以额外重新格式化 INI 文件,确保除了文件顶部之外,在某个部分上方始终只有一个空行。

示例文件集

当前目录中有六个文件用于测试,首先使用FOR循环以下命令行而不是已发布的批处理文件代码中的命令行:

for %%I in (*.ini) do call :UpateIniFile "%%I"

File1.ini 具有部分和条目,但值错误:

[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=0

[SECTION2]
SETTINGX=1234

[SECTION3]
SETTINGX=4567

File2.ini 具有所需值的部分和条目:

[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=1
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567

File3.ini 具有顶部的部分,但不包含条目:

[SAMPLE SETTINGS]
SERVER=MYPC
[SECTION2]
SETTINGX=1234

[SECTION3]
SETTINGX=4567

File4.ini 完全缺少该部分:

[SECTION2]
SETTINGX=1234

[SECTION3]
SETTINGX=4567

File5.ini 以部分结尾,但不包含条目:

[SECTION2]
SETTINGX=1234

[SECTION3]
SETTINGX=4567

[SAMPLE SETTINGS]


SERVER=MYPC

File6.iniFile1.ini 类似,但此文件设置了只读属性。

样本文件集的结果

批处理文件写入此样本集的日志文件:

Value updated in: "File1.ini"
Value existed in: "File2.ini"
Entry added to:   "File3.ini"
Section+entry to: "File4.ini"
Entry added to:   "File5.ini"
Failed to update: "File6.ini"

File2.iniFile6.ini 根本没有更新。

其他四个文件在批处理文件执行后有以下几行:

File1.ini:

[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=1

[SECTION2]
SETTINGX=1234

[SECTION3]
SETTINGX=4567

File3.ini:

[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=1
[SECTION2]
SETTINGX=1234

[SECTION3]
SETTINGX=4567

File4.ini:

[SECTION2]
SETTINGX=1234

[SECTION3]
SETTINGX=4567
[SAMPLE SETTINGS]
Reboot=1

File5.ini:

[SECTION2]
SETTINGX=1234

[SECTION3]
SETTINGX=4567

[SAMPLE SETTINGS]


SERVER=MYPC
Reboot=1

所以批处理文件很好地处理了样本文件集。

INI文件更新例程说明

首先检查是否找到了要更新的文件,如果找不到文件,则会将适当的信息附加到日志文件中。

子例程取消定义下面代码中使用的接下来的三个环境变量。

子程序 UpateIniFile 中使用的 FOR 循环在我对
的回答中有详细说明 How to read and print contents of text file line by line?

FINDSTR 以行号和冒号开头的 INI 文件输出中的每一行首先分配给环境变量 Line,未启用延迟扩展以防止包含感叹号的行损坏.

Next delayed expansion 已启用,这会导致同时创建现有环境变量的副本。有关SETLOCALENDLOCAL 命令的详细信息,请阅读this answer 的下半部分。了解这两个命令的作用对于理解代码的其余部分非常重要。

第一个 IF 条件为真,如果应该更新哪个值的条目已经在具有所需值的临时文件中,那么文件中的所有剩余行都可以复制到临时文件中,而不需要任何进一步的处理。在这种情况下,从文件中读取的行是通过删除行号和由 FINDSTR 添加到行中的冒号来输出的。

第二个 IF 条件为真,如果在批处理文件顶部定义的部分直到当前行都没有找到。在这种情况下,从文件读取的行也会输出行号和冒号,但会进行额外的不区分大小写的字符串比较,以确定该行是否包含感兴趣的部分。如果找到感兴趣的部分,则环境变量 EntryUpdate 在进入子程序时定义的环境中定义为值 1

否则当前行低于感兴趣的部分。

如果没有行号和冒号的这一行不区分大小写,等于要使用所需值更新的条目,则可以停止行的处理,因为文件包含已经具有所需值的条目。命令GOTO用于退出FOR循环,继续批处理标签ValueExists下面的批处理文件处理,其中临时文件被删除,信息写入在离开子程序之前记录该值已存在于当前文件中的日志文件。

如果感兴趣的部分中没有行号和冒号的行是空行,则环境变量 EmptyLines 在进入子例程时定义的先前环境中增加 1。值 0 用在 EmptyLines 上,未按照命令 SET 的帮助进行定义。感兴趣的部分在线没有做任何其他事情是一个空行。

对于感兴趣部分中的非空行,首先重新定义环境变量 Line,删除行号和冒号,以便进一步处理该行。

下一个条件将额外用双引号括起来的行的第一个和最后一个字符与字符串 "[]" 进行区分大小写的比较,以确定该行是否是新部分的开始。如果此条件为真,则感兴趣的部分根本不包含该条目。因此,现在输出具有所需值的条目,接下来可能在尚未输出新部分之前找到的所有空行。然后输出包含新部分的行,并在进入子例程时定义的环境中,环境变量 EntryUpdate 被重新定义为字符串值 3,环境变量 CopyLines 被定义为中的所有其他行现在可以将文件复制到临时文件中。

但是如果当前行不是一个新的部分,那么它是感兴趣的部分中的非空行。它可能是其条目的值不是所需值或不同条目的行。因此,首先输出所有空行,这些空行可能位于感兴趣部分中当前输入行的上方。

下一个命令 FOR 用于拆分当前行并分配给循环变量 J 左到第一个等号的字符串(在零个或多个等号之后)希望没有 INI 文件包含的行的开头)。

如果感兴趣部分中的当前行不区分大小写,而不是应更新哪个值的条目,则输入行只是输出。否则,将找到要更新的条目行,因此在使用字符串值 EntryUpdate 重新定义环境变量 2 和环境变量 CopyLines 之前,将使用条目名称和所需值输出该行定义为将所有其他行简单地复制到临时文件中。

FOR 循环中处理 INI 文件行的所有输出都被重定向到临时文件中。

可能是当前的 INI 文件根本不包含感兴趣的部分,可以在处理所有行后通过检查环境变量 EntryUpdate 是否仍未定义来找到感兴趣的部分。在这种情况下,带有所需值的部分和条目将附加到临时文件,并忽略环境变量 EmptyLines 以忽略 INI 文件底部的所有空行。

也有可能 INI 文件中的最后一部分是感兴趣的部分,但是直到文件末尾都没有找到具有要更新值的条目。因此,再使用一个 IF 条件来检查是否需要在文件末尾附加,并忽略文件末尾的所有空行以及具有所需值的条目。

现在临时文件包含完成批处理文件执行后刚刚处理的 INI 文件应包含的行。因此,如果临时文件不是只读或受文件权限写保护或受文件访问权限写保护(因为当前由使用此 INI 文件的应用程序打开),则将临时文件移动到 INI 文件目录并替换 INI 文件。

如果当前的 INI 文件不能被所需的修改替换,临时文件将被删除,并将此错误情况记录在日志文件中。否则,当前 INI 文件将成功更新,并记录在日志文件中,其中包含批处理文件如何完成更新的信息。

附加信息

现在应该清楚,Windows 命令处理器不是为文件内容修改而设计的,因为它是为运行命令和可执行文件而设计的。有很多脚本解释器比 cmd.exe 更适合此任务。

要了解使用的命令及其工作原理,请打开 command prompt 窗口,在那里执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • call /?
  • del /?
  • echo /?
  • endlocal /?
  • findstr /?
  • for /?
  • goto /?
  • if /?
  • move /?
  • set /?
  • setlocal /?

另见:Where does GOTO :EOF return to?

,

我最终得到了什么:

@echo off
setlocal EnableExtensions Disabledelayedexpansion
set TODAY=%Date:~4,2%-%Date:~7,2%-%Date:~10,4%
set Target=SMSStart.ini
set SectionName=[Maintenance]
set EntryName=Reboot
set EntryValue=1
set LogFile=./INI_VAL_CHANGE_%TODAY%_Log.txt
set TempFile=%TEMP%\%~n0.tmp
set ListFile=PCList.txt

if not exist "./%ListFile%" (
    echo ERROR: List file %ListFile%" not found.>"%LogFile%"
   goto EndBatch
)

XCOPY /Y %~dp0*_log.txt %~dp0%LOGS>nul
ERASE %~dp0*_log.txt /Q

Echo PC list: %ListFile% 
Echo Run: %DATE%:%TIME%
Echo PC list: %ListFile%>>%LogFile%
Echo Run: %DATE%:%TIME%>>%LogFile%
Echo Target File: %Target%
Echo Target File: %Target%>>%LogFile%
Echo Search Key: %EntryName%= Update: "%EntryName%=%EntryValue%"
Echo Search Key: %EntryName%= Update: "%EntryName%=%EntryValue%">>%LogFile%
Echo =============================
Echo =============================>>%LogFile%

for /F "usebackq delims=" %%I in ("%ListFile%") do call :UpateIniFile "\\%%I\Storeman\%Target%"
goto EndBatch

:UpateIniFile
set "EmptyLines="
set "EntryUpdate="
set "CopyLines="
(for /F delims^=^ eol^= %%I in ('%SystemRoot%\System32\findstr.exe /N "^" %1 2^>nul') do (
    set "Line=%%I"
    setlocal EnableDelayedExpansion
    if defined CopyLines (
        echo(!Line:*:=!
        endlocal
    ) else if not defined EntryUpdate (
        echo(!Line:*:=!
        if /I "!Line:*:=!" == "!SectionName!" (
            endlocal
            set "EntryUpdate=1"
        )
    ) else (
        if /I "!Line:*:=!" == "!EntryName!=!EntryValue!" (
            endlocal
            goto ValueExists
        )
        if "!Line:*:=!" == "" (
            endlocal
            set /A EmptyLines+=1
        ) else (
            set "Line=!Line:*:=!"
            if "!Line:~0,!EmptyLines!) do echo(
                for /F delims^=^=^ eol^= %%J in ("!Line!") do (
                    if /I not "%%~J" == "!EntryName!" (
                        echo !Line!
                        endlocal
                    ) else (
                        echo !EntryName!=!EntryValue!
                        endlocal
                        set "EntryUpdate=2"
                        set "CopyLines=1"
                    )
                )
                set "EmptyLines="
            )
        )
    )
))>"%TempFile%"

if not defined EntryUpdate (
    >>"%TempFile%" echo %SectionName%
    >>"%TempFile%" echo %EntryName%=%EntryValue%
    set EntryUpdate=4
)
if %EntryUpdate% == 1 (
    >>"%TempFile%" echo %EntryName%=%EntryValue%
    set "EntryUpdate=3"
)

move /Y "%TempFile%" %1 2>nul
if errorlevel 1 (
    echo Failed to update: %1 : !time:~0,8!
    echo Failed to update: %1 : !time:~0,8!>>"%LogFile%"
    del "%TempFile%"
    goto :EOF
)

if %EntryUpdate% == 2 (
    echo !EntryName!=!EntryValue! updated in: %1 : !time:~0,8! 
    echo !EntryName!=!EntryValue! updated in: %1 : !time:~0,8!>>"%LogFile%"
    goto :EOF
)
if %EntryUpdate% == 3 (
    echo !EntryName!=!EntryValue! added to:   %1 : !time:~0,8!
    echo !EntryName!=!EntryValue! added to:   %1 : !time:~0,8!>>"%LogFile%"
    goto :EOF
)
if %EntryUpdate% == 4 (
    echo Section+ !EntryName!=!EntryValue! to: %1 : !time:~0,8!
    echo Section+ !EntryName!=!EntryValue! to: %1 : !time:~0,8!>>"%LogFile%"
    goto :EOF
)

:ValueExists
    echo !EntryName!=!EntryValue! existed in: %1 : !time:~0,8!
    echo !EntryName!=!EntryValue! existed in: %1 : !time:~0,8!>>"%LogFile%"
    del "%TempFile%"
    goto :EOF

:EndBatch
endlocal
pause
,

@Mofi - 尝试按照您的建议支持代码:

do {do_stuff; table[i][0] = number;} while (table[i][0] != number);

试图找出为什么当批处理无法到达网络上的 PC 并输出错误级别 1 时,脚本返回 !time:~0,8!而不是实际的时间戳?

这是我正在使用的当前版本:

move /Y "%TempFile%" %1 2>nul
if errorlevel 1 (
    echo Failed to update: %1 : !time:~0,8!>>"%LogFile%"
    del "%TempFile%"
    goto :EOF

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res