我试图为我们在工作中使用的新软件自动化一些流程。我有一个.zip文件,每4小时从FTP自动下载。然后解压缩.zip文件,其中的.txt文件使用2个.bat文件重命名为.csv文件,我设法将这些文件与我的知识一起废弃,并在软件中导入生成的.csv文件。这部分工作正常。
现在的问题是.csv有两条冗余线路需要删除才能上传到软件中:第1行和第3行。我还没有找到Google搜索的方法。
有人可以帮我解决那些剥离这些线的命令吗?
此外,是否有办法合并"我的多个.bat在一起?这是我的提取脚本:
@echo off
for /R "C:\FTP Download" %%I in ("*.zip") do (
"%ProgramFiles(x86)%\7-Zip\7z.exe" x -y -o"%%~dpI" "%%~fI"
)
这是我的重命名脚本:
@echo off
ren *.txt *.csv
我想必须有办法将它们放在同一个.bat中,但我还没有想出那个。
答案 0 :(得分:1)
删除第1行和第3行:
假设您的输入为C:\file.txt
,
首先,让我们跳过第一行,然后将第二行复制到C:\newfile.txt
@echo off
for /f "skip=1" %%a in (C:\file.txt) do (
echo %%a >> C:\newfile.txt
goto OutOfLoop
)
:OutOfLoop
现在我们可以完全忽略文件的前三行,然后继续将其他想要的文本复制到C:\newfile.txt
:
for /f "skip=3 delims=*" %%b in (C:\file.txt) do (
echo %%b >> C:\newfile.txt
)
这将替换原始文件,并删除我们的临时副本:
xcopy C:\newfile.txt C:\file.txt /y
del C:\newfile.txt /f /q
注:
要覆盖目录中的文件,您可以使用:
for /r %%file in (*) do (
REM Here you can put the code to parse each input file
)
要重命名工作,请首先浏览到解压缩文件的目录。
您的最终脚本如下所示:
@echo off
REM Browse to the desired directory
cd C:\FTP Download\
REM Extract all zip files
for /r %%I in (*.zip) do (
"%ProgramFiles(x86)%\7-Zip\7z.exe" x -y -o"%%~dpI" "%%~fI"
)
REM Rename all extracted .txt files to .csv
ren *.txt *.csv
REM For each .csv file
for /r %%file in (*.csv) do (
REM Copy second line to C:\newfile.txt
for /f "skip=1" %%a in (%%file) do (
echo %%a >> C:\newfile.txt
goto OutOfLoop
)
:OutOfLoop
REM Copy fourth to last line to C:\newfile.txt
for /f "skip=3 delims=*" %%b in (%%file) do (
echo %%b >> C:\newfile.txt
)
REM replace original file and remove temporary files
xcopy C:\newfile.txt %%file /y
del C:\newfile.txt /f /q
)
答案 1 :(得分:1)
从命令行开始下一行命令:
for /F "tokens=1* delims=:" %G in ('findstr /N /R "^" xxxx.txt') do @if not "%G"=="1" @if not "%G"=="3" @echo %G %H
在.bat
脚本中:
for /F "tokens=1* delims=:" %%G in (
'findstr /N /R "^" xxxx.txt'
) do if not "%%G"=="1" if not "%%G"=="3" echo %%G %%H
在调试之后,将其替换为下一个代码段:
type nul>xxxx.csv
>>xxxx.csv (for /F "tokens=1* delims=:" %%G in (
'findstr /N /R "^" xxxx.txt'
) do if not "%%G"=="1" if not "%%G"=="3" echo(%%H)
更新:将两个代码段合并到一个脚本(注释代码):
@ECHO OFF >NUL
SETLOCAL enableextensions
rem to main working directory
pushd "C:\FTP Download"
for /R %%I in ("*.zip") do (
"%ProgramFiles(x86)%\7-Zip\7z.exe" x -y -o"%%~dpI" "%%~fI"
rem need change working directory due to recursion in `for /R %%I ...`
pushd "%%~dpI"
for /F "delims=" %%X in ('dir /B *.txt') do (
type nul>"%%~nX.csv"
>>"%%~nX.csv" (for /F "tokens=1* delims=:" %%G in (
'findstr /N /R "^" "%%~X"'
) do if not "%%G"=="1" if not "%%G"=="3" echo(%%H)
rem delete processed text file
del "%%~X"
)
rem back to main working directory
popd
rem archive processed zip file
move "%%~fI" "%tmp%\done%%~nxI"
)
popd
资源(必读):