Как удалить первый и последний символ из файла, используя пакетный скрипт? - PullRequest
2 голосов
/ 24 марта 2010

Это содержимое моего входного файла, которое я использую для копирования в выходной файл.

#sdfs|dfasf|sdfs|
sdfs|df!@$%%*&!sdffs|
sasdfasfa|dfsdf|#sdfs|

Что мне нужно сделать, это пропустить первый символ '#' и последний символ '|' в выходном файле. Таким образом, вывод будет

sdfs|dfasf|sdfs|
sdfs|df!@$%%*&!sdffs|
sasdfasfa|dfsdf|#sdfs

Пакетный скрипт является новым для меня, но я старался изо всех сил и пробовал эти коды,

:: drop first and last char

@echo off > xyz.txt & setLocal EnableDelayedExpansion

for /f "tokens=* delims=" %%a in (E:\abc1.txt) do (
set str=%%a
set str=!str:~1!
echo !str!>> xyz.txt
)

Как вы видите, он не может выдать требуемый результат.

Результат, который сейчас создается, похож на

sdfs|dfasf|sdfs|
dfs|dfsdffs|
asdfasfa|dfsdf|#sdfs|

Я не знаю, почему строка !@$%%*&! также разрывается!?

Ответы [ 3 ]

2 голосов
/ 24 марта 2010

Следующий скрипт, вызов файла far.vbs , и создание нового файла.

Код:

set OldFile=E:\abc1.txt
set NewFile=E:\xyz.txt
echo. > "%NewFile%"
start far.vbs "%NewFile%" "%OldFile%"


far.vbs - удалить первый и последний символ из файла.
Создайте новый файл far.vbs в той же папке, что и первый скрипт, и вставьте следующий код:

Set OldFile = CreateObject("Scripting.FileSystemObject")
Set rdOldFile = OldFile.OpenTextFile(Wscript.Arguments(1), 1)
oContent = rdOldFile.ReadAll
rdOldFile.Close

Set lOldFile = CreateObject("Scripting.FileSystemObject")
Set lrdOldFile = OldFile.OpenTextFile(Wscript.Arguments(1), 1)
oLen = len(lrdOldFile.ReadAll)
lrdOldFile.Close

oData = oContent
oData = Right(oContent, oLen-1)
oData = Left(oData, oLen-2)

Set NewFile = CreateObject("Scripting.FileSystemObject")
Set fData = NewFile.OpenTextFile(Wscript.Arguments(0), 2)
fData.WriteLine (oData)
fData.Close
2 голосов
/ 24 марта 2010
Пакет

никогда не является сильной стороной для обработки файлов и обработки текста. Если у вас есть роскошь, вы можете скачать sed с GNU win32, а затем использовать этот один вкладыш.

C:\test>sed  "/#/{s/^#//;s/|$//}" file
sdfs|dfasf|sdfs
sdfs|df!@$%%*&!sdffs|
sasdfasfa|dfsdf|#sdfs
2 голосов
/ 24 марта 2010

Я не могу отладить свой код прямо сейчас, но попробуйте:

:: drop first and last char

@echo off > xyz.txt
@echo off > xyz2.txt
@echo off > xyz3.txt

setLocal EnableDelayedExpansion

for /f "tokens=* delims= " %%a in (E:\abc1.txt) do (
set /a N+=1
echo %%a >> xyz.txt
echo %%b >> xyz2.txt
echo %%%c >> xyz3.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...