使用批处理文件将多个 .csv 文件从一台机器复制并重命名到另一台机器

使用批处理文件将多个 .csv 文件从一台机器复制并重命名到另一台机器

来源数据可用

20161020162432intsol_wla_00000304.csv
$20161020162432intsol_wla_00000305.csv

& 20-30 个类似文件。

目的地应接收的数据应如下:

intsol_wla_20161020162432_00000304.csv
intsol_wla_$20161020162432_00000305.csv

以下是我正在尝试做的事情:

copy "d:\source\\ *int.csv" "d:\destination\\ *intsol_wla_%date:~-4,4%%date:~3,2%%date:~-10,2%.csv"

但这会返回:

20161020162432_intsol_wla_2016 111.csv
$20161020162432_intsol_wla_2016 111.csv

我该如何解决这个问题?

答案1

我假设您的意思是“复制并重命名.....从一个文件夹到另一个文件夹”,而不是“机器”。

如果是这种情况,这里有一些代码可以完成这项工作:(带有 $ 符号的文件会产生一些麻烦,因此我创建了两个“for”循环来处理这两种情况)

@echo off

SET source="d:\source\"
SET dest="d:\destination\"

for %%a in (%source%$??????????????intsol_wla_*.csv) do (
    for %%F in (%%a) do (SET file=%%~nxF
        copy %%a %dest%intsol_wla_%file:~0,15%_%file:~26,8%.csv
    )
)

for %%b in (%source%??????????????intsol_wla_*.csv) do (
    for %%F in (%%b) do (SET file2=%%~nxF
        copy %%b %dest%intsol_wla_%file2:~0,14%_%file2:~25,8%.csv
    )
)

答案2

我的第一个 for 列出了文件,第二个 for 获取名称并按字母 i 和下划线将它们拆分为四个标记。

NAME   20161020162432intsol_wla_00000304.csv
      $20161020162432intsol_wla_00000305.csv
TOKEN ------1--------|--2--|-3-|------4-----

由于部分intsol_wla_是常量,我们只需要 token1 和 4

@Echo off & SetLocal EnableExtensions
Set Src=Q:\Test\2016-11\11
Set Dst=Q:\Test\Dst
PushD "%Src%"||(Echo can't cd to %Src%&Pause&Exit /b 1)
For %%A in (*intsol_wla_*.csv
  ) Do For /F "tokens=1,4 delims=i_" %%B in ("%%A"
  ) Do Echo copy "%%~fA" "%Dst%\intsol_wla_%%B_%%C"
PopD

OutPut,要真正复制,删除复制前面的回显。

copy "Q:\Test\2016-11\11\$20161020162432intsol_wla_00000305.csv" "Q:\Test\Dst\intsol_wla_$20161020162432_00000305.csv"
copy "Q:\Test\2016-11\11\20161020162432intsol_wla_00000304.csv" "Q:\Test\Dst\intsol_wla_20161020162432_00000304.csv"

相关内容