1

我尝试搜索以前的问题,但没有一个有效,或者我无法根据我的需要调整它们

我想写一个脚本,要求:

  • 文件夹
  • 标准
  • 旧字符串
  • 新字符串

并将指定文件夹和子文件夹中的每个文件(并强制用户键入一个)替换为特定条件(例如,它必须是“.cue”文件),并且:

  1. 如果文件是“只读”,禁用它
  2. 文件内容中搜索指定的旧字符串并将其替换为新字符串并将更改保存在同一文件中
  3. 如果文件是“只读”,请再次启用它

我有这个进展,但我不知道在“做”部分要这样做:

@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
4

1 回答 1

0

下面的批处理文件做你想做的事,它需要我的 FindRepl.bat 文件,你必须从这个站点复制

@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 (
   for /F "delims=" %%a in ('attrib "%%v"') do (
      set "attrib=%%a"
      set "attrib=!attrib:~0,10!"
      if "!attrib:R=!" neq "!attrib!" (
         attrib -R "%%v"
         set attrib=+R
      ) else (
         set attrib=-R
      )
   )
   call FindRepl "%old%" "%new%" < "%%v" > "%%v.tmp"
   move /Y "%%v.tmp" "%%v"
   attrib !attrib! "%%v"
)
pause

goto START

:ERROR
echo type something!!
goto START

您必须注意,“旧”字符串是 FindRepl.bat 文档中描述的“正则表达式”,因此您必须使用反斜杠转义任何句点。例如,您必须输入“\.wav”才能搜索“.wav”字符串!

于 2013-09-22T17:51:11.567 回答