我需要根据目录名重命名文件(或将其复制到新名称),该名称位于未知目录名下。
我有许多日期文件夹,包含子目录。在每个子目录下,是一个名为index.txt
的文件。该txt文件需要重命名或复制到其上方目录的名称。每个子目录的名称都是已知的,因此可以在必要时在脚本中使用。
例如:
>Tree C:\Test /f
C:\TEST
├───20170414124512
│ ├───Directory1
│ │ index.txt
│ │
│ ├───Directory2
│ │ index.txt
│ │
│ └───Directory3
│ index.txt
│
└───20170414134345
├───Directory1
│ index.txt
│
├───Directory2
│ index.txt
│
└───Directory3
index.txt
我需要最终结果如下:
**对不起,我应该把我尝试的内容包括在内。这是我尝试过的,但是没有用。
/ D / R" C:\ Test" %% a in(*)do echo ren" %% a \ index.txt" " %%〜Na.txt"答案 0 :(得分:0)
这样的事情应该这样做。 如果你想要的话,你可以把它移到别的地方。 这是一个powershell脚本。
foreach($folder in Get-ChildItem -Path "C:\Temp" -Recurse)
{
if ($folder -is [System.IO.DirectoryInfo])
{
if($folder.Name -contains "Your Foldername")
{
$path = $folder.FullName
Rename-Item "$path\index.txt" -NewName "Newname.txt"
}
}
}
答案 1 :(得分:0)
为了避免尝试重命名非现有的index.txt文件,如果要aschipl的建议应该添加:
@Echo off
for /D %%J in ("C:\Test\*"
) do for /D %%I in ("%%~fJ\*"
) do (
If exist "%%~fI\index.txt" Echo ren "%%~fI\index.txt" "%%~nI.txt"
)
如果输出看起来没问题,请删除最后一行中的回音:
ren "C:\Test\20170414124512\Directory1\index.txt" "Directory1.txt"
ren "C:\Test\20170414124512\Directory2\index.txt" "Directory2.txt"
ren "C:\Test\20170414124512\Directory3\index.txt" "Directory3.txt"
ren "C:\Test\20170414134345\Directory1\index.txt" "Directory1.txt"
ren "C:\Test\20170414134345\Directory2\index.txt" "Directory2.txt"
ren "C:\Test\20170414134345\Directory3\index.txt" "Directory3.txt"
答案 2 :(得分:0)
FOR /f "delims=" %%a IN (
'dir /b /s /a-d "u:\sourcedir\index.txt" '
) DO (
FOR /f "delims=" %%r IN ("%%~dpa.") DO ECHO REN "%%a" "%%~nr%%~xa"
)
如果您愿意,所有这些都可以在一条线上。我使用u:\sourcedir\
作为测试目录,所需的REN命令仅用于ECHO
以进行测试。 在您确认命令正确后,将ECHO REN
更改为REN
以实际重命名文件。
请注意,直接从提示执行和作为批处理文件的行是不同的。对于批处理行,metavariable
(循环控制变量)%%x
必须引用为%%x
,如果从命令提示符执行,则%x
必须引用for
。由于从提示中重复执行包含/b
的行没有意义(创建批处理文件更容易),我发布了批处理文件版本。如果需要,用户有责任根据提示进行调整。
在内存中,使用/s
基本格式/a-d
扫描子目录index.txt
创建目录列表,但不提供与%%a
匹配的文件的目录名。将每个名称分配给%%a
(“delims =”确保通过关闭默认分隔符来分配整个行)。通过重复%%~dpa
(.
)的驱动器和路径部分上的解析操作来检测目录名,通过添加ren
使其看起来像文件名。然后使用from-name(全部为%%a
)和to-name(仅限名称和扩展名)使用%%r
的“名称部分”和扩展部分构造%%a
命令.txt
(我们实际知道它是dir
,因为它是ren
命令中指定的内容) - 所有内容都整齐地用引号括起来,以便{{1}}能够在语法上与分隔符一起处理 Space 出现在被篡改的名字的任何地方。