2013-09-22 70 views
1

我试图寻找以前的问题,但没有工作或我不能使其适应我的需要脚本对指定的文件修改文件内容

我想编写一个脚本,询问:

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

而替换每个文件在指定的文件夹和子文件夹与特定标准(和力用户键入一个)(例如,它必须是一个“.CUE”文件),并且:

  1. 如果该文件是“只读”,禁用它
  2. 搜索指定旧字符串文件内容新的字符串替换它,并保存CH安格斯在同一个文件
  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 
+0

例子会很好。你真的需要恢复只读属性吗? – foxidrive

+0

例如我需要这个替换文件夹中每个.cue文件中的“.flac”字符串“.wav”“。也许一些.cue文件是“只读” – Ruben

回答

0

批处理文件下面,你想要什么,它需要我FindRepl.bat文件必须复制从this site

@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”字符串!

+0

谢谢!这工作 – Ruben