Windows 批处理文件:文件名的第一个单词作为第 1 列

Windows Batch File: First word of File Name as column 1

来自 computing.net 的以下代码几乎完全有用,但需要稍作改动。我不知道这是如何工作的。有人可以帮忙吗?

for %%a in (*.csv) do call :addId "%%~Na" "%%a"
goto :EOF

:addId
@echo off
for /f "usebackq delims=" %%b in (%2) do (
> #.csv echo ID,%%b
goto :next
)
:next
for /f "usebackq skip=1 delims=" %%b in (%2) do (
 >> #.csv echo %~1,%%b
)
 move #.csv %2

  1. 需要去掉插入一个header"ID"
  2. 的代码
  3. 仅使用文件的第一个单词而不是完整的文件名 --- 作为第 1 列的值

这里,word 表示 collection 个由 space 分隔的字母表。所以第一个单词将是第一个 space.

之前的 collection 个字母

有人可以帮忙吗?

使用for /f 解析循环:

@echo off
for %%a in (*.csv) do (
    echo Processing %%a
    for /f "tokens=1 eol=*" %%b in ("%%~na") do (
        set /p header=<"%%a"
        call echo %%header%%
        for /f "skip=1 usebackq delims=" %%c in ("%%a") do echo %%b,%%c
    ) >"%%a.new"
    move /y "%%a.new" "%%a" >nul
)
pause

这将完整保留 header 行。

你能试试这个吗?请告诉我它是如何工作的。

    setlocal enabledelayedexpansion
for %%a in (*.csv) do call :addId "%%~Na" "%%a"
goto :EOF



:addId
@echo off
for /f "usebackq delims=" %%b in (%2) do (
rem > #.csv echo ID,%%b
goto :next
)
:next
for /f "usebackq skip=1 delims=" %%b in (%2) do (
    for /f "tokens=1 delims= " %%x in ("%~1") do set firstWord=%%x
    >> #.csv echo !firstWord!,%%b
)
move #.csv %2