2016-02-29 35 views
-3

我有我從Sybase IQ數據庫導出分隔的數據文件。它在數據文件中的每條記錄的開頭和結尾都有一個引號。數據本身是製表符分隔的,例如我怎樣才能把每個記錄第一和最後一個字符在Windows分隔的文件?

'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%" 
    ) 

但我得到一個「命令的語法不正確」的錯誤消息。

+5

如果你沒有powershell,爲什麼要求在標題上使用Powershell解決方案並使用'powershell'標籤呢?那麼,批處理或Powershell? – vonPryz

+0

現在是批次。 :) –

+0

@VonPryz - >我的道歉誤導性的標題。這是在黑夜很晚了,我是想發佈查詢並得到了由各地限制不斷提示使用標籤和東西難住了。我的意思是「無Powershell」解決方案,即僅Windows批處理。 – AJay

回答

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! 
    ) 
) 

資源(必讀):

+2

你可以保存一個'set'命令並說'set'變量=!變量:〜1,-1!'' – SomethingDark

+0

這會破壞包含'!'的任何行。可能不是OP的數據問題,但這是一個應該注意的限制。可以通過在循環內切換延時擴展ON和OFF來修復。這也將刪除空行,這也可能不是問題。 – dbenham

+0

@JosefZ:我會試試這個,讓你知道它是如何工作的。非常感謝 !。 – AJay

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。

+0

我對第三方實用程序或軟件有限制,即使它們很簡單且免費。因此,我要求使用批處理命令的解決方案,而不是使用PowerShell。不過感謝jrepl上的建議。這在其他情況下會很有用。 – AJay

+0

@AJay - 這很不幸。我也有工作限制 - 我無法下載第三方exe文件。但是我能夠創建並運行JScr​​ipt和批處理文件腳本。 JREPL不過是一個也運行JScr​​ipt的批處理文件,所以我沒有問題。該鏈接提供了JREPL的完整腳本。您只需複製代碼並將其粘貼到文本(腳本)編輯器中即可。我沒有看到你所寫的批處理腳本是如何區分你從互聯網複製的。所以也許你可以使用JREPL。 – dbenham

+0

Hi @dbenham。我會按照你所說的去嘗試,因爲我可以將文本複製並粘貼到文件中並運行它。非常感謝 !。 – AJay

0

批處理文件無法準確處理某些數據,因此解決此問題的最佳方法是使用混合批處理JScript文件,如dbenham的JREPL.BAT。

但是,你並不需要幾百行代碼的執行,因爲這一個簡單的替代品。下面的小批量的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)); 
} 
相關問題