gpt4 book ai didi

batch-file - 将文件的路径位置更改为所需的路径

转载 作者:行者123 更新时间:2023-12-04 08:44:36 25 4
gpt4 key购买 nike

我想将文件中定义的内容路径即 logging.properties 替换为 jboss7 location 的所需位置路径。

基本上我正在使用安装程序,我必须浏览我的 jboss7 文件夹并将其定位到用户所需的任何位置。但是在 jboss7 的几个文件中,有一些硬编码的路径定义在给定的 logging.properties 文件中。

我需要将该硬编码路径更改为所需的位置路径。

截至目前,我在同一文件夹中有 repl.bat 和文件 test.bat 文件。

可以在以下链接中找到 repl.bat 帮助文件:-

http://www.dostips.com/forum/viewtopic.php?f=3&t=3855

我只是复制了代码并创建了 repl.bat 文件。

test.bat 文件:-

 @ECHO OFF
SETLOCAL
SET "folder="
FOR /r "C:\" %%a IN (tintin.txt) do IF EXIST "%%a" SET "folder=%%~dpa"&GOTO got1
FOR /r "D:\" %%a IN (tintin.txt) do IF EXIST "%%a" SET "folder=%%~dpa"&GOTO got1
:got1
echo "%folder%"
PAUSE

set "newpath=%folder%"
set "newpath=%newpath:\=\\%"
echo "%newpath%"
PAUSE
type "logging.properties" | repl "(Directory=).*(\\\\standalone\\\\)" "$1%newpath%$2">"logging.properties.tmp"
PAUSE
move "logging.properties.tmp" "logging.properties"
PAUSE
GOTO :EOF
PAUSE

在此 test.bat 文件中,我正在搜索文件 tintin.txt 文件并将路径设置为变量名作为“文件夹”。 tintin.txt文件就在jboss7的文件夹里面。这是因为系统中可能有多个jboss7应用服务器文件夹。
到目前为止,我已经获得了路径,即“C:\Users\Anuj\Desktop\jboss7\”并设置到变量“文件夹”中。
现在有一个名为 logging.properties 的文件到文件夹位置
C:\Users\Anuj\Desktop\jboss7\standalone\configuration

logging.properties :-
 com.latilla.import.uploadDirectory=C:\\progra~2\\Latilla\\C4i\\jboss7\\ standalone\\uploads
com.latilla.import.maxFilesUploadNumber=10


com.latilla.export.templateFile=C:\\progra~2\\Latilla\\C4i\\jboss7\\standalone\\templates\\GDV_HDI_Format.xls
com.latilla.etl.pluginsRootDirectory=C:\\progra~2\\Latilla\\C4i\\jboss7\\standalone\\cloverETL\\plugins

com.latilla.etl.templatesDirectory=C:\\progra~2\\Latilla\\C4i\\jboss7\\standalone\\etl

com.latilla.db.user=postgres
com.latilla.db.pass=password

repl.bat 帮助文件有助于将 url 路径替换为所需的路径,即设置为变量名称“文件夹”的路径。
我想用设置为变量名称“文件夹”的路径替换 C:\progra~2\Latilla\C4i\jboss7\。
注意:-
这里在 logging.properties 文件路径内容具有不同的路径格式,即 C:\
表示双斜线。 \

可能是我尝试过的脚本 test.bat 不正确。
当我双击 test.bat 文件时出现错误。

最佳答案

尽管我无法帮助您解决使用 repl.bat 时遇到的问题文件,我可以建议一种不同的方法来解决路径替换的初始问题。

如果jboss7字符串保证出现在配置文件的所有原始路径中,您可以尝试以下方法:

@ECHO OFF
SETLOCAL DisableDelayedExpansion
FOR /F "delims=" %%A IN ('DIR /B /S C:\tintin.txt') DO (CD /D "%%~dpA" & CALL :got1)
FOR /F "delims=" %%A IN ('DIR /B /S D:\tintin.txt') DO (CD /D "%%~dpA" & CALL :got1)
GOTO :EOF

:got1
SET "propfile=%CD%\standalone\configuration\logging.properties"
IF NOT EXIST "%propfile%" GOTO :EOF
SET "tempfile=%TEMP%\logging.properties.tmp"
FIND /I /V "jboss7\\" >"%tempfile%"
>>"%tempfile%" (
FOR /F "tokens=1,* delims=" %%I IN ('FIND /I "jboss7\\"') DO (
SET "pathname=%%J"
SETLOCAL EnableDelayedExpansion
IF NOT "!pathname!" == "!pathname:*jboss7\\=!" (
SET "pathname=%__CD__:\=\\%!pathname:*jboss7\\=!"
)
ECHO %%I=!pathname!
ENDLOCAL
)
)
ECHO Old file "%propfile%":
TYPE "%propfile%"
ECHO =======================================
ECHO New file:
TYPE "%tempfile%"
PAUSE
:: uncomment the next line once you have verified the replacement works correctly
::MOVE "%tempfile%" "%propfile%"

搜索 tintin.txt文件已略有更改,以便可能使过程更快。现在循环读取 DIR 的输出,而不是遍历每个目录并检查它是否包含文件。 ,它只返回实际存在的条目。

请注意,您也可以使用 FOR /R循环,就像在您当前的代码中一样,具有相同的效果,即仅返回现有路径,但 IN 子句需要包含掩码而不是普通名称,但这必须是一个掩码,不能匹配您的系统不仅仅是 tintin.txt .例如,如果您确定不存在名为 tintin.txt1 的文件。或 tintin.txtx或其他任何地方 tintin.txt后跟正好一个字符,您可以改用以下模板:
FOR /R "C:\" %%A IN (tintin.txt?) DO (CD /D "%%~dpA" & CALL :got1)

D:\ 相同.这将只返回对实际存在并匹配掩码的文件的引用。

此外,您可以看到循环不会跳转 ( GOTO ) 到 got1标签,而是调用 got1子程序。通过这种更改,可以一次性处理多个应用程序实例。我不知道你的可以安装多次。如果没有,你可能想把它改回 GOTO .

我的脚本中的子例程使用描述中指定的完整路径引用配置文件( ...\standalone\configuration\logging.properties )。出于某种原因,在您的脚本中,文件仅通过其名称进行引用,即使之前没有将当前目录更改为文件位置的 CD 或 PUSHD 命令。我假设您试图简化您的脚本并忽略了这一点,无论是否有意。否则我可能在你的解释和/或脚本中遗漏了一些东西。

在验证配置文件存在于预期位置后,替换本身以这种方式完成:
  • 所有非路径配置行都一次性写入临时文件。
  • 包含路径的每个配置行都以这种方式处理:
  • 如果它不包含 jboss7\\字符串,省略;
  • 否则路径的一部分直到并包括 jboss7\\已移除;
  • 当前目录插入到剩余部分之前(在每个 \ 之后被替换为 \\ );
  • 新值被放回配置行;
  • 更新行被添加到同一个临时文件中。
  • 旧版本的配置文件替换为新版本。

  • 显然,脚本可能会更改已处理文件中的行顺序,但假设这无关紧要。

    关于batch-file - 将文件的路径位置更改为所需的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18913438/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com