使用批处理命令创建文件夹和复制文件名

时间:2016-01-15 19:10:49

标签: batch-file scripting

我想将列表中的所有文件复制到另一个位置,并根据文件名的某些属性在该位置创建子文件夹。在这种情况下,公司名称。所有文件当前都位于desktop \ main中。

例如,假设列表中包含

等文件名
From((Sales@JonesCompany.com))main.txt
From((AR@PeterIndustries.com))main.txt
From((AP@BaseCorporation.com))main.txt

脚本应该复制这些文件,创建像JonesCompany.com这样的目录,最后将所有相应的文件名复制到该位置。

最终结果应该是

desktop\final_location\JonesCompany\
desktop\final_location\PeterIndustries\
desktop\final_location\BaseCorporation\

到目前为止我已经

for /f "delims=" %%i in (main.txt) do echo F|xcopy "C:\Users\Desktop\Main\%%i" MD %%i "C:\Users\Desktop\final_location\%%i" /i /z /y

提前致谢

1 个答案:

答案 0 :(得分:0)

认为这可以做你想要的:

@ECHO OFF
SETLOCAL
set "basepath=C:\Users\Desktop\Main\"
set "filter=*.txt"
set "targetpath=C:\Users\Desktop\final_location\"
echo scanning %basepath%%filter%
for %%i in ("%basepath%%filter%") do (
    for /F "tokens=1,2,3 delims=@)" %%a in ("%%i") do (
        echo Creating Folder %%b...
        mkdir %basepath%%%b\
        echo copying file %%i to %targetpath%%%b\...
        copy "%%i" %targetpath%%%b\
    )
)

您可以根据需要轻松更改basepathtargetpathfilter变量。

<强>解释 最棘手的部分是for /F "tokens=1,2,3 delims=@)" %%a in ("%%i") do (%%i是一个文件名。我们说它是From((Sales@JonesCompany.com))main.txt。此for语句会在分隔符@)的任何实例中拆分字符串。这给我们留下了以下字符串数组:

  1. %%a:“From((Sales”
  2. %%b:“JonesCompany.com”
  3. %%c:NULL(我认为)
  4. %%d:“main.txt”
  5. 显然,我们需要%%b,因此我们将其用作新文件夹名称。然后,我们将原始完整路径%%i复制到新文件夹。

    更新删除了一个循环,感谢@Stephan指出我没有意识到的东西!