Batch file Windows批处理文件:文件名的第一个字作为第1列
下面来自computing.net的代码几乎完全有用,但需要稍作修改。我不知道这是怎么回事。有人能帮忙吗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
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
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
开关(表示“是”)会使实际确认无效移动命令。非常感谢您的精彩解释。稍后将尝试所有方法。