正在使用批处理读取文件名



我正在做一个新项目,我想得到一些帮助
我有一个脚本,我把它放在一起,效果很好,但我想看看我们是否可以更新它

我需要帮助的是让批处理文件读取它自己文件名的两部分,并使用它来匹配和替换许多不同.txt文件的内容

这些是我的bat脚本名称,我已经制作了100多个单独的批脚本

(50) Kentucky.bat
(60) New_York.bat
(90) Texas.bat

我总共有7个不同的.txt文件,每个txt文件看起来像这样

cmmd.txt
| Kentucky
| New_York
| Texas
| Houston

这就是我设置脚本的方式,我对设置很满意,它完成了所需的功能

@echo off 
setlocal enableextensions disabledelayedexpansion
set "search=Kentucky"
set "replace=50"

set "SOURCE=%~dp0New Folder 1"

set "textFile1=cmmd.txt"
set "textFile2=cwab.txt"
set "textFile3=ecbc.txt"
set "textFile4=elic.txt"
set "textFile5=tcpd.txt"
set "textFile6=uadu.txt"
set "textFile7=urdm.txt"
for /f "delims=" %%i in ('type "%source%%textFile1%" ^& break ^> "%source%%textFile1%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%source%%textFile1%" echo(!line:%search%=%replace%!
endlocal
)

for /f "delims=" %%i in ('type "%source%%textFile2%" ^& break ^> "%source%%textFile2%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%source%%textFile2%" echo(!line:%search%=%replace%!
endlocal
)

for /f "delims=" %%i in ('type "%source%%textFile3%" ^& break ^> "%source%%textFile3%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%source%%textFile3%" echo(!line:%search%=%replace%!
endlocal
)

for /f "delims=" %%i in ('type "%source%%textFile4%" ^& break ^> "%source%%textFile4%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%source%%textFile4%" echo(!line:%search%=%replace%!
endlocal
)

for /f "delims=" %%i in ('type "%source%%textFile5%" ^& break ^> "%source%%textFile5%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%source%%textFile5%" echo(!line:%search%=%replace%!
endlocal
)

for /f "delims=" %%i in ('type "%source%%textFile6%" ^& break ^> "%source%%textFile6%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%source%%textFile6%" echo(!line:%search%=%replace%!
endlocal
)

for /f "delims=" %%i in ('type "%source%%textFile7%" ^& break ^> "%source%%textFile7%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%source%%textFile7%" echo(!line:%search%=%replace%!
endlocal
)

call "%~dp0(60) New_York.bat"

因此,这将是我运行第一个.bat后的最终结果,它调用其余的

cmmd.txt
| 50
| 60
| 90
| Houston

因此,我想在set "search=Kentucky"set "replace=50"的设置位置使用.bat文件的文件名,而不是我编辑每个SearchReplace

如果你注意到我在最后添加了一个call,它工作得很好,但有没有一种方法可以让脚本调用下一个.bat文件,而不必编辑每个.bat文件

正如你所看到的,我按照数字顺序命名我的文件,每个.bat都会调用下一个.bat文件

(50) Kentucky.bat - this will call (60) New_York.bat
(60) New_York.bat - this will call (90) Texas.bat
(90) Texas.bat - the last one will not have a call

拥有这样的东西将有助于节省大量时间,因为我所要做的就是根据需要重命名.bat文件,就这样

我非常感谢任何帮助和您的所有时间

与此同时,我将继续制作我的.bat文件

重复代码很糟糕(容易出错且难以维护(。在需要的地方(代码不同的地方(合并并使用参数。这只剩下一个脚本和一个文本文件来维护替换参数,看起来像:

50,Kentucky
60,New_York
90,Texas

代码:

@echo off
setlocal
REM get vars from csv
for /f "usebackq tokens=1,2 delims=," %%a in ("replacements.csv") do call :replace "%%~a" "%%~b"
:: REM get vars from parameters
:: call :replace "%~1" "~2"
goto :eof
:replace 
REM replace in all matching files:
set "source=%~dp0New Folder"
for %%a in ("%source%*.txt") do (
for /f "delims=" %%i in ('type "%%a" ^& break ^> "%%a" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%%a" echo(!line:%~2=%~1!
endlocal
)
)

如果您需要,我提供了一种使用参数的方法(用::注释掉。使用for循环(读取文本文件(等参数

replace.bat 20 "New Jersey"

(两种方法都支持空格(

~<modifer><var>修饰符见for /?%~<number>参数见call /?

最新更新