Win Пакетное чтение файла - не сохраняет ввод в другой файл - PullRequest
0 голосов
/ 09 июля 2020

Я хочу читать .csv построчно, удалять пробелы, а затем выводить строки в другой .csv как "отфильтрованный" вывод. Сначала мой ввод:

test 
 test
    t e st  .
th isssss    a te st

Теперь мой сценарий синтаксического анализа (обновлен):

@echo off
SETLOCAL EnableDelayedExpansion
cls


del K:\Users\Ultron\test\test2.csv
echo CSRV>>K:\Users\Ultron\test\test2.csv


for /F "tokens=*" %%A in (K:\Users\Ultron\test\test.csv) do (
set "line=%%A" 
echo %line%
echo %line% >>K:\Users\Ultron\test\test2.csv
)


notepad K:\Users\Ultron\test\test2.csv

Теперь блокнот открывается и показывает ожидаемый результат:

CSRV
ECHO Turned Off (OFF).
ECHO ist ausgeschaltet (OFF).
ECHO ist ausgeschaltet (OFF).
ECHO ist ausgeschaltet (OFF).

Если Я включаю эхо и вижу, что строки читаются правильно, но не выводит их в файл. Если эхо включено, файл содержит ту же информацию, только там написано: «ECHO включен (ON)».

Фактическая переменная не сохраняется.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Это легко сделать с помощью PowerShell. Если вы используете поддерживаемый компьютер Windows, PowerShell будет доступен. Примечание: это удалит символы -все- ПРОБЕЛ. Он не будет сохранять символы ПРОБЕЛ внутри полей с разделителями в файле формата CSV. Это пример в вопросе.

Get-Content -Path 'C:/src/t/test2.csv' |
    ForEach-Object { $_ -replace ' ','' } |
    Out-File -FilePath 'test3.csv' -Encoding utf8

Если вам необходимо запустить из консоли cmd.exe или скрипта файла .bat, это можно использовать.

powershell -NoLogo -NoProfile -Command ^
    "Get-Content -Path 'test2.csv' |" ^
        "ForEach-Object { $($_ -replace ' ','') } |" ^
        "Out-File -FilePath 'test3.csv' -Encoding utf8"
0 голосов
/ 09 июля 2020

Проблема, он не читал и не записывал правильно, было более одной детали.

Требуется для исправления:

  • Я удалил номер токена
  • изменил вывод файла. Он должен использовать! Var! synthax (delayedexpansion)
  • удалите «)», которого я не видел после многих попыток. Как неловко ...
  • используйте странный синтаксис вроде ('введите «C: \ путь с пробелами \ stuff»'), поэтому сценарий работает с путем с пробелом - поскольку это целевой usecase

Результат выглядит примерно так:

@echo off
SETLOCAL EnableDelayedExpansion
cls


del "K:\Users\Ultron\test\te st\test2.csv"
echo CSRV>>"K:\Users\Ultron\test\te st\test2.csv"


for /F "tokens=*" %%A in ('type "K:\Users\Ultron\test\te st\test.csv"') do (
set "line=%%A"
set "line=!line: =!"
set "line=!line:    =!"
(echo !line: =!)>>"K:\Users\Ultron\test\te st\test2.csv"
)


notepad "K:\Users\Ultron\test\3.7-12V_inductor_current\te st\test2.csv"

Это приводит к ожидаемому .csv:

test 
test 
test. 
thisssssatest 
...