Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
使用批处理脚本将.csv文件中的行复制到另一个.csv文件中_Csv_Batch File_Vbscript - Fatal编程技术网

使用批处理脚本将.csv文件中的行复制到另一个.csv文件中

使用批处理脚本将.csv文件中的行复制到另一个.csv文件中,csv,batch-file,vbscript,Csv,Batch File,Vbscript,我正在从设备(输出)创建.csv文件,需要将此文件中的特定行数复制到另一个具有相同格式的.csv文件中 幸运的是,它们的格式相同,因此每个文件都有相同的行要复制(第68到107行)。我曾经尝试过使用其他来源的代码,但到目前为止,我所能做的只是复制数据,但无法将其插入到其他文件中。任何帮助都会很好 @echo off Set "InputFile=C:\*****\Desktop\Dev\Test\Default.csv" Set "OutPutFile=C:\*****\Desktop\Dev

我正在从设备(输出)创建.csv文件,需要将此文件中的特定行数复制到另一个具有相同格式的.csv文件中

幸运的是,它们的格式相同,因此每个文件都有相同的行要复制(第68到107行)。我曾经尝试过使用其他来源的代码,但到目前为止,我所能做的只是复制数据,但无法将其插入到其他文件中。任何帮助都会很好

@echo off

Set "InputFile=C:\*****\Desktop\Dev\Test\Default.csv"
Set "OutPutFile=C:\*****\Desktop\Dev\Test\OutputData.csv"
Set FromLine=68
Set ToLine=107

Call:ExtractLinesFromTextFile "%InputFile%" %FromLine% %ToLine% > 
"%OutPutFile%"

Exit /b

:ExtractLinesFromTextFile <InputFile> <FromLine> <ToLine>
(
echo Wscript.echo(ExtractLinesFromTextFile("%~1",%2,%3^)^)
echo Function ExtractLinesFromTextFile(TextFile,FromLine,ToLine^)
echo If FromLine ^<= ToLine Then
echo With CreateObject("Scripting.FileSystemObject"^).OpenTextFile(TextFile^)
echo Do Until .Line = FromLine Or .AtEndOfStream
echo .SkipLine
echo Loop
echo Do Until .Line ^> ToLine Or .AtEndOfStream
echo ExtractLinesFromTextFile = ExtractLinesFromTextFile ^& (.ReadLine ^& 
vbNewLine^)
echo Loop
echo End With
echo End If
echo End Function
)>"%~n0.vbs"
Cscript /Nologo "%~n0.vbs" "%~1" %~2 %~3
If Exist "%~n0.vbs" Del "%~n0.vbs"
Exit /b
@echo关闭
设置“InputFile=C:\******\Desktop\Dev\Test\Default.csv”
设置“OutPutFile=C:\******\Desktop\Dev\Test\OutputData.csv”
设置FromLine=68
设置为直线=107
调用:ExtractLinesFromTextFile”%InputFile%%%FromLine%%ToLine%%>
%OutPutFile%
退出/b
:ExtractLinesFromTextFile
(
echo Wscript.echo(ExtractLinesFromTextFile(“%1”、%2、%3^)^)
echo函数ExtractLinesFromTextFile(TextFile、FromLine、ToLine^)
如果从行^ToLine或.AtEndOfStream发出回声
echo ExtractLinesFromTextFile=ExtractLinesFromTextFile^&(.ReadLine^&)
vbNewLine ^)
回音环
回音结束
回显结束If
回波结束函数
)>“%~n0.vbs”
Cscript/Nologo“%~n0.vbs”“%~1”%~2%~3
如果存在“%~n0.vbs”Del“%~n0.vbs”
退出/b

绝对不需要使用创建和调用VBScript的批处理文件


您可以通过以下纯批处理脚本完成任务:

@echo关闭
setlocal EnableExtensions EnableDelayedExpansion
rem//在此处定义常量:
设置“\u FILEIN=!USERPROFILE!\Desktop\Dev\Test\Default.csv”
设置“\u FILEOUT=!USERPROFILE!\Desktop\Dev\Test\OutputData.csv”
设置/A“\u LINEFROM=68”
设置/A“\u LINETO=107”
rem//计算输入文件的行数:
对于/F%%C in(“^<”!\u FILEIN!”“查找/C/V”“”)请执行以下操作(
rem//使用重定向读取和写入文件:
<“!\u FILEIN!”>“!\u FILEOUT!”(
rem//遍历所有可用行:
对于(1,1,%%C)中的/L%%I,请执行以下操作(
rem//读一行:
设置“行=“&set/P行=“”
rem//检查当前线路的位置(线号):
如果%%I GEQ%\u line从%if%%I LEQ%\u line到%(
rem//有条件地返回当前行:
回声(!线!
)
)
)
)
端部
退出/B
请注意,纯批处理文件解决方案可能在行长度和文件大小方面受到限制。上述方法无法处理长度超过1023字节的行和超过2147483647行的文件


下面是另一个速度较慢的纯批处理脚本解决方案:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u FILEIN=%USERPROFILE%\Desktop\Dev\Test\Default.csv”
设置“\u FILEOUT=%USERPROFILE%\Desktop\Dev\Test\OutputData.csv”
设置/A“\u LINEFROM=68”
设置/A“\u LINETO=107”
rem//使用重定向写入文件:
>“%\u文件输出%”(
rem//使用循环读取文件,前缀为行索引:
对于/F“delims=“%%L in('findstr/N“^”“%\u FILEIN%”)do(
rem//提取行号:
2> nul集合/A“IDX=%%L”
rem//读取当前行:
设置“行=%%L”
setlocal EnableDelayedExpansion
rem//检查当前线路的位置(线号):
if!IDX!GEQ%\u行从%if!IDX!LEQ%\u行到%(
rem//有条件地返回当前行:
回音(!行::=!
)
端部
)
)
端部
退出/B

这种方法无法处理长度超过8191-7=8184字节的行和超过2147483647行的文件。

绝对不需要使用创建和调用VBScript的批处理文件


您可以通过以下纯批处理脚本完成任务:

@echo关闭
setlocal EnableExtensions EnableDelayedExpansion
rem//在此处定义常量:
设置“\u FILEIN=!USERPROFILE!\Desktop\Dev\Test\Default.csv”
设置“\u FILEOUT=!USERPROFILE!\Desktop\Dev\Test\OutputData.csv”
设置/A“\u LINEFROM=68”
设置/A“\u LINETO=107”
rem//计算输入文件的行数:
对于/F%%C in(“^<”!\u FILEIN!”“查找/C/V”“”)请执行以下操作(
rem//使用重定向读取和写入文件:
<“!\u FILEIN!”>“!\u FILEOUT!”(
rem//遍历所有可用行:
对于(1,1,%%C)中的/L%%I,请执行以下操作(
rem//读一行:
设置“行=“&set/P行=“”
rem//检查当前线路的位置(线号):
如果%%I GEQ%\u line从%if%%I LEQ%\u line到%(
rem//有条件地返回当前行:
回声(!线!
)
)
)
)
端部
退出/B
请注意,纯批处理文件解决方案可能在行长度和文件大小方面受到限制。上述方法无法处理长度超过1023字节的行和超过2147483647行的文件


下面是另一个速度较慢的纯批处理脚本解决方案:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u FILEIN=%USERPROFILE%\Desktop\Dev\Test\Default.csv”
设置“\u FILEOUT=%USERPROFILE%\Desktop\Dev\Test\OutputData.csv”
设置/A“\u LINEFROM=68”
设置/A“\u LINETO=107”
rem//使用重定向写入文件:
>“%\u文件输出%”(
rem//使用循环读取文件,前缀为行索引:
对于/F“delims=“%%L in('findstr/N“^”“%\u FILEIN%”)do(
rem//提取行号:
2> nul集合/A“IDX=%%L”
rem//读取当前行:
设置“行=%%L”
setlocal EnableDelayedExpansion
rem//检查当前线路的位置(线号):
if!IDX!GEQ%\u行从%if!IDX!LEQ%\u行到%(
rem//有条件地返回当前行:
回音(!行::=!
)
端部
)
)
端部
退出/B

此方法无法处理长度超过8191-7=8184字节的行和长度超过2147483647行的文件。

为了说明为什么不希望批量执行此操作,以下是将第68到107行复制到VBScript中另一个文件的代码:

inputFilename=“C:\path\to\input.csv”
输出文件名