用于查找和替换子文件夹文件中的文本的批处理脚本

时间:2014-11-07 15:40:13

标签: batch-file

我试图让以下代码运行脚本运行的一个目录的所有子目录:

for /r %%I in ('dir/b *.ucf') do @call :Start "%%I"

:Start
copy x\*.ucf > nul
Set old=_USTN_PROJECT
Set new=#

Set old1=#NAME
Set new1=_USTN_PROJECTNAME

:main

for /f "tokens=* delims= " %%a in ('dir/b *.ucf') do (
call :sub1 %%a
move/y NEWFILE %%a
call :sub2 %%a
move/y NEWFILE1 %%a
)

goto :eof

:sub1
@echo off > NEWFILE & setLocal enableDELAYedeXpansioN
for /f "tokens=* delims= " %%i in (%1) do (
set S=%%i
set S=!S:%old%=%new%!
echo.!S!
)>> NEWFILE
echo _USTN_PROJECT          = $(_USTN_WORKSPACEROOT)Projects/EPR-Projects/>> NEWFILE
goto :eof

:sub2
@echo off > NEWFILE1 & setLocal enableDELAYedeXpansioN
for /f "tokens=* delims= " %%j in (%1) do (
set T=%%j
set T=!T:%old1%=%new1%!
echo.!T!
) >> NEWFILE1

没有' for / r'声明我可以在目标目录中运行批处理它可以工作,但在当前版本中虽然看起来在每个目录中找不到文件但是我做错了什么?

谢谢,

标记

1 个答案:

答案 0 :(得分:0)

for /r %%I in ('dir/b *.ucf') do @call :Start "%%I"

- >>您正在尝试执行for /r,它将带括号的参数作为
   文件名匹配。它不太可能找到该文件名。可能你想要

for /r %%I in (*.ucf) do @call :Start "%%I"

将递归扫描*.ucf个文件并将整个路径名应用于%%I

- >>完成for循环后,批次将继续通过此标签继续。
这可能不是你想要做的。

:Start

- >>标签名称错误,因为START是cmd关键字。

copy x\*.ucf > nul

- >>不知道这个命令应该做什么。

Set old=_USTN_PROJECT
Set new=#

Set old1=#NAME
Set new1=_USTN_PROJECTNAME

- >>啊哈。所以你设置了old(1)new(1) - >>目前,%1包含目标.ucf文件的完整文件名(如果您采用了我建议的更改)

:main

for /f "tokens=* delims= " %%a in ('dir/b *.ucf') do (

- >>现在,您正在扫描当前目录中的.ucf files 列表,以便将文件名显示给%%a。您可能应该使用%1代替%%a,因为它包含原始for /r

中的完整文件名
call :sub1 %%a
move/y NEWFILE %%a
call :sub2 %%a
move/y NEWFILE1 %%a

- >>做两次换人;首先将旧的变为新的;替换文件然后将old1更改为new1并再次替换该文件。非常复杂,但它会起作用。 但是您的代码使用%%a,这是仅来自当前目录的文件名。您可能需要%1,这是原始for/r

中的完整文件名
)

goto :eof

- >>现在按照两个例程执行替换;可能会被简化并合并为一个操作 - 如果我们知道整体方案是什么......

:sub1
@echo off > NEWFILE & setLocal enableDELAYedeXpansioN
for /f "tokens=* delims= " %%i in (%1) do (
set S=%%i
set S=!S:%old%=%new%!
echo.!S!
)>> NEWFILE
echo _USTN_PROJECT          = $(_USTN_WORKSPACEROOT)Projects/EPR-Projects/>> NEWFILE
goto :eof

:sub2
@echo off > NEWFILE1 & setLocal enableDELAYedeXpansioN
for /f "tokens=* delims= " %%j in (%1) do (
set T=%%j
set T=!T:%old1%=%new1%!
echo.!T!
) >> NEWFILE1

所有相当令人困惑,但也许我的评论将有助于解决。