我正在使用 Windows 8,我想知道是否可以合并包含同名文件的文件夹,但不是覆盖它们,而是更改名称。
例如:
Folder A, with files 01, 02, and 03
Folder B, with files 01, 02, and 03
我希望结果是
Folder C (or any name) with:
Files 01(A01), 02(A02), 03(A03), 04(B01), 05(B02) and 06(B03)
所有这些文件都与文件夹 A 和 B 中的文件相同,并且注意顺序相同。
答案1
使用以下脚本(批处理文件):
@echo off
setlocal enabledelayedexpansion
set counter=1000
set target=c
for %%S in (a b) do (
for /f "delims=" %%F in ('dir %%S /b/a-d/one') do (
set /a counter=counter+1
move %%S\"%%F" %target%\"%%~xF"
)
)
笔记:
setlocal enabledelayedexpansion
启用循环中变量的特殊处理。for %%S in (a b) do …
对括号中的每个值执行以下语句组一次,并将设置为该值。我为此%%S
选择了字母,因为这些是S
s源目录。您可以在括号中放置任意数量的源目录。for /f "delims=" %%F in ('…') do …
对引号中命令的每一行输出执行一次以下语句组'…'
,并将%%F
设置为行。我F
为此选择了字母,因为这些是F文件名。dir %%S /b/a-d/one
给出了b是源目录中文件的列表(没有标题、日期、大小等)%%S
。/a-d
表示仅列出文件(没有目录);/one
表示o按以下方式对条目进行排序n同和埃扩大。set /a counter=counter+1
是不言自明的。- 因此,我们最终执行一个
move
命令,将文件 (%%F
) 从源目录 (%%S
) 移动到目标目录。!counter:~1!
是 语法的一种形式,取变量的子字符串从第二个字符(因为第一个字符是 #0)到末尾。 因此,如果逐步遍历值 1001、1002、1003、……,则此子字符串为 001、002、003 等。 如果您确定文件少于 100 个,则可以将 的初始化更改为 100。是文件名的扩展名。%variable:~start,length%
counter
counter
counter
%%~xF
%%F
a
这将移动和目录中的所有文件b
。如果要获取a
和b
目录树中的所有内容,请将内循环更改为
for /f "delims=" %%F in ('dir %%S /b/a-d/one/s') do (
set /a counter=counter+1
move "%%F" %target%\"!counter:~1!%%~xF"
)
- 添加
/s
到dir
命令会使其递归。 - 虽然只给您文件名,但却 给您完整路径,因此该命令不需要包含源目录。
dir directory_name /b
dir directory_name /b/s
move
%%S
更多说明:
- 这将处理带有空格的文件名。
这将处理带有空格的目录名称 - 只需引用它们:
set target="c food" for %%S in ("a train" "b good") do ( ︙
当然,您应该先将move
其更改为 来测试这一点echo move
。