Windows CMD如何提取.sql文件指定区间内容并写入新.sql文件?
Windows CMD 提取SQL文件指定区间内容的实现方案
原生CMD的type命令本身不支持内容区间筛选,可通过以下两种自带工具方案实现需求,无需额外安装软件:
方案1:CMD直接调用PowerShell单命令(推荐,最简单)
直接在CMD窗口执行以下命令即可,将命令中的表名、文件路径替换为你实际的参数即可:
powershell -Command "$content = Get-Content 'C:\Users\Documents\file.sql' -Raw; $content -match '(?s)-- Table structure for table `address`.*?UNLOCK TABLES;' | Out-Null; $matches[0] | Out-File 'C:\Users\Documents\new_file.sql' -Encoding UTF8"
参数说明:
- 把命令里的
address替换为你的目标表名 - 若原文件编码不是UTF8,可将最后的
UTF8改为Default适配系统默认编码 - 文件路径包含空格的话,保持用单引号包裹即可正常识别
方案2:纯CMD批处理实现
如果需要完全用CMD原生语法实现,可以新建一个.bat后缀的批处理文件,写入以下内容后双击运行即可:
@echo off setlocal enabledelayedexpansion :: 配置区:按需修改以下三个参数即可 set "TARGET_TABLE=address" set "SOURCE_FILE=C:\Users\Documents\file.sql" set "OUTPUT_FILE=C:\Users\Documents\new_file.sql" :: 固定起止标记,无需修改 set "START_FLAG=-- Table structure for table `%TARGET_TABLE%`" set "END_FLAG=UNLOCK TABLES;" set "WRITE_SWITCH=0" :: 清空已有输出文件 del "%OUTPUT_FILE%" 2>nul :: 逐行读取匹配写入,保留原文件空行 for /f "delims=" %%l in ('type "%SOURCE_FILE%" ^| findstr /n "^"') do ( set "line=%%l" set "line=!line:*:=!" if "!line!"=="%START_FLAG%" set "WRITE_SWITCH=1" if !WRITE_SWITCH! equ 1 >>"%OUTPUT_FILE%" echo(!line! if "!line!"=="%END_FLAG%" set "WRITE_SWITCH=0" ) endlocal echo 提取完成,结果已写入%OUTPUT_FILE%
内容的提问来源于stack exchange,提问作者JasonX
相关产品推荐
相关产品推荐

