我有一个从Sybase IQ数据库导出的分隔数据文件。它在数据文件中每条记录的开头和结尾都有引号。数据本身是制表符分隔的,例如
'Name <tab> Address <tab> Phone'
'Name <tab> Address <tab> Phone'
'Name <tab> Address <tab> Phone'
我想删除第一个和最后一个字符,即单引号。我不关心嵌入在数据文件中任何记录中的单引号。
我根据本网站上的答案尝试了类似的内容:
@echo off
Set "InputFile=oldfile.dat"
Set "OutputFile=newfile.dat"
setLocal EnableDelayedExpansion > "%OutputFile%"
for /f "usebackq tokens=* delims=" %%a in ("%InputFile%")
do (
set variable=%%a
set variable=%variable:~0,+1!
set variable=%variable:~0,-1!
echo.%variable
>> "%OutputFile%"
)
但我得到的命令语法不正确&#39;错误信息。
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
Set "InputFile=oldfile.dat"
Set "OutputFile=newfile.dat"
> "%OutputFile%" (
for /f "usebackq tokens=* delims=" %%a in ("%InputFile%") do (
set "variable=%%~a"
set "variable=!variable:~1!" remove the 1st character
set "variable=!variable:~0,-1!" remove the last character
echo.!variable!
)
)
资源(必读):
%~a
等特殊页面)Command Line arguments (Parameters) !variable:~1!
等)Extract part of a variable (substring) > "%OutputFile%"
特殊页面)Redirection 答案 1 :(得分:0)
与大多数其他文本文件修改任务一样,使用JREPL.BAT - a regular expression find and replace utility可以轻松有效地解决此问题。 JREPL是纯脚本(混合JScript /批处理),可以在XP以后的任何Windows机器上本机运行。可以从命令行通过jrepl /?
或jrepl /??
获取完整文档以获取分页输出。
jrepl "^'(.*)'$" "$1" /f "oldfile.txt" /o "newfile.txt"
您可以通过将-
指定为输出文件来使输出覆盖原始文件。
jrepl "^'(.*)'$" "$1" /f "file.txt" /o -
JREPL是一个批处理文件,因此如果将命令放在另一个批处理脚本中,则必须使用CALL JREPL。
答案 2 :(得分:0)
批处理文件无法准确处理某些数据,因此解决此问题的最佳方法是使用混合Batch-JScript文件,如dbenham的JREPL.BAT。
但是,您不需要数百行代码来执行替换,就像这一行一样简单。下面的小型Batch-JScript混合文件实现了这种替换,并且非常简单,因此您可以理解它并引入一些小修改,即使您对JScript一无所知。使用.BAT扩展名保存此文件。
@if (@CodeSection == @Batch) @then
@echo off
setLocal
Set "InputFile=oldfile.dat"
Set "OutputFile=newfile.dat"
cscript //nologo //E:JScript "%~F0" < "%InputFile%" > "%OutputFile%"
goto :EOF
@end
// JScript section
while ( ! WScript.Stdin.AtEndOfStream ) {
WScript.Stdout.WriteLine(WScript.Stdin.ReadLine().slice(1,-1));
}