我尝试搜索以前的问题,但都不起作用,或者我无法使它们适应我的需要。
我想编写一个脚本来请求:
- 文件夹
- 标准
- 旧字符串
- 新字符串
并替换每个文件在指定的文件夹和子文件夹(并强制用户输入一个)标准(例如,它必须是一个“.cue”文件),并且:
- 如果该文件是只读的,请禁用它。
- 搜索指定旧字符串在里面文件内容并将其替换为新字符串, 和保存同一文件中的更改。
- 如果该文件是只读的,请再次启用它。
我到目前为止有这段代码,但我不知道该做什么do
:
@echo off
setLocal enableDELAYedexpansion
:START
set "var2="
set /P var2="type folder "
if "%var2%"=="" goto ERROR
set /p old="old string ? "
set /p new="new string ? "
set /p files="what criteria ? "
echo modifying files...
for /r "%var2%" %%v in (%%files) do (
???
)
pause
goto START
:ERROR
echo type something!!
goto START
答案1
使用 FOR /F 与 DIR /B /S /ADR 来获取未设置只读标志的文件。
然后使用已发布的几种方法之一来修改文本文件。我更喜欢使用混合 JScript/批处理实用程序,称为 REPL.BAT在 stdin 上执行正则表达式搜索和替换,并将结果写入 stdout。它是纯本机脚本,可在 XP 及以上版本的任何现代 Windows 机器上运行 - 无需第三方可执行文件。完整文档嵌入在脚本中。
该L
选项会导致文字搜索,并且该V
选项从变量而不是字符串文字中获取搜索和替换值。
假设 REPL.BAT 位于您当前的文件夹中,或者更好的是,位于您路径中的某个位置:
@echo off
setlocal
:START
set "var2="
set /P var2="type folder "
if "%var2%"=="" goto ERROR
set /p old="old string ? "
set /p new="new string ? "
set /p files="what criteria ? "
for /f "delims=" %%F in ('dir /b /s /a-d-r "%var2%\%files%" 2^>nul') do (
echo modifying %%F
type "%%F" | repl old new lv >"%%F.new"
move /y "%%F.new" "%%F" >nul
)
pause
exit /b
:ERROR
echo type something!!
goto START