在我的 SQL 文件中,我已将C:\
目录硬编码到所有输出文件路径中,但有时客户端希望将输出存储在上E:\
,例如。
我该如何仅使用批处理来执行此操作?我考虑过使用 PowerShell,但它未在客户端计算机上启用。
我想要做的事情:
- 递归遍历所有目录。
- 在每个目录中,查找
C:\
并替换为E:\
。
答案1
真恶心,盲目地对整个目录树结构进行大规模替换会让我感到紧张。但如果你认为这是安全的……
使用纯批处理执行您想要的操作可能比较棘手,具体取决于您的文件内容。但使用我编写的名为 REPL.BAT 的混合 JScript/批处理实用程序可以轻松完成。该实用程序在 stdin 上执行正则表达式搜索和替换,并将结果写入 stdout。它是纯脚本,可在 XP 及以后的任何现代 Windows 机器上运行,因此不需要安装任何第三方.exe
文件。REPL.BAT 实用程序和文档可在此处获得。。
假设您当前目录中有 REPL.BAT,或者更好的是,在您的 PATH 中的某个地方,那么以下简单的单行命令应该可以直接从命令行完成此操作,无需批处理。
for /r %F in (*.sql) do @(type "%F"|repl "C:\" "E:\" >"%F.new"&move /y "%F.new" "%F" L >nul)
您可以通过添加开关使搜索不区分大小写I
。
for /r %F in (*.sql) do @(type "%F"|repl "C:\" "E:\" I >"%F.new"&move /y "%F.new" "%F" L >nul)
或者如果你更喜欢批处理脚本(带I
开关)
@echo off
for /r %%F in (*.sql) do (
type "%%F"|repl "C:\" "E:\" LI >"%%F.new"
move /y "%%F.new" "%%F" >nul
)
我L
从头到尾都使用文字开关;另一种选择是转义\
。
repl "C:\\" "E:\\" I