我想将列表中的所有文件复制到另一个位置,并根据文件名的某些属性在该位置创建子文件夹。在这种情况下,公司名称。所有文件当前都位于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
提前致谢
答案 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\
)
)
您可以根据需要轻松更改basepath
,targetpath
和filter
变量。
<强>解释强>
最棘手的部分是for /F "tokens=1,2,3 delims=@)" %%a in ("%%i") do (
。 %%i
是一个文件名。我们说它是From((Sales@JonesCompany.com))main.txt
。此for
语句会在分隔符@
或)
的任何实例中拆分字符串。这给我们留下了以下字符串数组:
%%a
:“From((Sales”%%b
:“JonesCompany.com”%%c
:NULL(我认为)%%d
:“main.txt”显然,我们需要%%b
,因此我们将其用作新文件夹名称。然后,我们将原始完整路径%%i
复制到新文件夹。
更新删除了一个循环,感谢@Stephan指出我没有意识到的东西!