批處理怎樣替換資料夾下所有文字內容?
阿新 • • 發佈:2019-01-07
求一個批量替換資料夾中文字中內容的檔案。。。
舉例說明哈。
比如:D盤 1資料夾下 有1.txt 2.txt 3.txt。。。 還有資料夾a 資料夾B 資料夾C 切資料夾裡還有txt及資料夾。。
資料夾a 資料夾B 資料夾C 這三個資料夾是在 D:\1\ 下面, 下面還有子資料夾
把所有txt檔案裡 禁止2 替換成 允許1
請教如何替換 整個D:\1 資料夾下 所有txt文本里內容啊???
多個內容修改 下面那個程式碼還適用嗎?
比如 禁止2改成允許1
還有 禁止5 改成 允許5
哈※ 改成 呵
@echo off
setlocal disabledelayedexpansion
set "dir=D:\1"
set "old=禁止2"
set "new=允許1"
findstr /s /m /c:"%old%" "%dir%\*.txt" >..tmp
for /f "delims=" %%i in (..tmp) do (
findstr /n .* "%%i" >..tmp
(
for /f "delims=" %%a in (..tmp) do (
set str=%%a
setlocal enabledelayedexpansion
set "str=!str:%old%=%new%!"
echo,!str:*:=!
endlocal
)
) >"%%i"
)
del ..tmp
複製程式碼
@echo off
setlocal disabledelayedexpansion
title 修改中...
rem 設定
set "dir=D:\1"
set replace_list="禁止2=允許1" "禁止5=允許5" "哈※=呵"
rem 輸出檔案列表
dir /s /b /a:-d-r "%dir%\*.txt" >..tmp || goto exit
rem 統計檔案個數
for /f %%i in (' "find /c /v "" <..tmp" ') do (
set /a n_total = %%i, n_current = 0
)
rem 替換
set "s= "
for /f "delims=" %%i in (..tmp) do (
set /a n_current += 1
findstr /n .* "%%i" >..tmp
(
for /f "delims=" %%a in (..tmp) do (
set str=%%a
setlocal enabledelayedexpansion
set /p =%s: =%!n_current! / %n_total% <nul >con
set str=!str:*:=!
for %%a in (%replace_list%) do (
if defined str set str=!str:%%~a!
)
echo,!str!
endlocal
)
) >"%%i"
)
:exit
title 完成
del ..tmp 2>nul
echo,
echo 按任意鍵退出...
pause >nul
本帖最後由 tmplinshi 於 2011-6-19 14:24 編輯
建議用 bwfr,替換速度非常快。
bwfr.exe "D:\1\*.txt" -s -f -argfile:list.txt
複製程式碼
list.txt 的檔案寫法:
禁止2->允許1
禁止5->允許5
哈※->呵
----------------------------------------------------------------------
也可以使用其他的分隔符,例如:
bwfr.exe "D:\1\*.txt" -s -f -argfile:list.txt -dlm:"|"
複製程式碼
list.txt 的檔案寫法:
禁止2|允許1
禁止5|允許5
哈※|呵
舉例說明哈。
比如:D盤 1資料夾下 有1.txt 2.txt 3.txt。。。 還有資料夾a 資料夾B 資料夾C 切資料夾裡還有txt及資料夾。。
資料夾a 資料夾B 資料夾C 這三個資料夾是在 D:\1\ 下面, 下面還有子資料夾
把所有txt檔案裡 禁止2 替換成 允許1
請教如何替換 整個D:\1 資料夾下 所有txt文本里內容啊???
多個內容修改 下面那個程式碼還適用嗎?
比如 禁止2改成允許1
還有 禁止5 改成 允許5
哈※ 改成 呵
@echo off
setlocal disabledelayedexpansion
set "dir=D:\1"
set "old=禁止2"
set "new=允許1"
findstr /s /m /c:"%old%" "%dir%\*.txt" >..tmp
for /f "delims=" %%i in (..tmp) do (
findstr /n .* "%%i" >..tmp
(
for /f "delims=" %%a in (..tmp) do (
set str=%%a
setlocal enabledelayedexpansion
set "str=!str:%old%=%new%!"
echo,!str:*:=!
endlocal
)
) >"%%i"
)
del ..tmp
複製程式碼
@echo off
setlocal disabledelayedexpansion
title 修改中...
rem 設定
set "dir=D:\1"
set replace_list="禁止2=允許1" "禁止5=允許5" "哈※=呵"
rem 輸出檔案列表
dir /s /b /a:-d-r "%dir%\*.txt" >..tmp || goto exit
rem 統計檔案個數
for /f %%i in (' "find /c /v "" <..tmp" ') do (
set /a n_total = %%i, n_current = 0
)
rem 替換
set "s= "
for /f "delims=" %%i in (..tmp) do (
set /a n_current += 1
findstr /n .* "%%i" >..tmp
(
for /f "delims=" %%a in (..tmp) do (
set str=%%a
setlocal enabledelayedexpansion
set /p =%s: =%!n_current! / %n_total% <nul >con
set str=!str:*:=!
for %%a in (%replace_list%) do (
if defined str set str=!str:%%~a!
)
echo,!str!
endlocal
)
) >"%%i"
)
:exit
title 完成
del ..tmp 2>nul
echo,
echo 按任意鍵退出...
pause >nul
本帖最後由 tmplinshi 於 2011-6-19 14:24 編輯
建議用 bwfr,替換速度非常快。
bwfr.exe "D:\1\*.txt" -s -f -argfile:list.txt
複製程式碼
list.txt 的檔案寫法:
禁止2->允許1
禁止5->允許5
哈※->呵
----------------------------------------------------------------------
也可以使用其他的分隔符,例如:
bwfr.exe "D:\1\*.txt" -s -f -argfile:list.txt -dlm:"|"
複製程式碼
list.txt 的檔案寫法:
禁止2|允許1
禁止5|允許5
哈※|呵