Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Windows批处理文件:文件名的第一个字作为第1列_Batch File_Filenames_Edit - Fatal编程技术网

Batch file Windows批处理文件:文件名的第一个字作为第1列

Batch file Windows批处理文件:文件名的第一个字作为第1列,batch-file,filenames,edit,Batch File,Filenames,Edit,下面来自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

下面来自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

  • 需要删除插入标题“ID”的代码
  • 仅使用文件的第一个字,不使用完整的文件名---作为第1列的值
  • 在这里,单词的意思是由空格分隔的字母表的集合。所以第一个单词将是第一个空格前的字母集合

    有人能帮忙吗?

    使用解析循环:

    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
    
    @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
    
    @echo关闭
    对于(*.csv)中的%%a,请执行以下操作(
    回波处理%%a
    对于(“%%~na”)中的/f“令牌=1 eol=*”%%b,请执行以下操作(
    设置/p标题=“%%a.new”
    移动/y“%%a.新“%%a”>nul
    )
    暂停
    

    这将使标题行保持完整。

    您能试试吗?请告诉我它是如何工作的

        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
    

    您能否提供代码来源的确切链接。现有标题行会发生什么情况?它是否存在?因为如果盲目添加一列,则所有列都将从预期位置移动。我正在处理的1000个文件中没有标题行。而且,由于解决方案是由其他人提供的,并且只有类似于我需要的解决方案,我可以删除标题。(我猜ID是标题)。根据我正在处理的文件的要求,安全地在前面添加一列。1.您可以删除
    :addId
    :next
    包括在内,因为没有打印任何内容,2.它将询问每个文件是否替换它,3.延迟扩展将使其在名称中包含
    的文件上失败,因此如果y如果您真的想使用它,请使用
    setlocal
    +
    endlocal
    4循环使用它。
    firstWord
    是按.csv中的每一行计算的,这是无效的。5.由于
    >
    也无效,因此,.csv中的每一行都会重新打开输出文件,因为我是一个不懂编码的人,我可能完全错了。我删除了您建议的d行和上面的代码根本不起作用。在我没有删除上面的行时,它就起作用了。
    :addId
    应该保留下来。代码工作得很好。非常感谢Mihai_Mandis!(因为我不太懂编码,我不确定wOxxOm告诉了我什么。)它会从所有文件中删除第一行!效果很好。它也会对文件夹中的所有文件起作用吗?通过删除
    echo Processing%%a
    它会停止请求用户输入继续吗?非常感谢wOxxOm!1。
    *.csv
    表示它对当前文件夹中的所有csv文件起作用,但对其子文件夹不起作用(使用
    for/r%%a
    而不是
    for%%a
    可以很容易地解决此问题)。2.
    echo
    只需打印当前处理的文件名即可,如果不需要,您可以删除此行。
    /y
    开关(表示“是”)会使实际确认无效移动命令。非常感谢您的精彩解释。稍后将尝试所有方法。