如果我在Windows 7上,我有一个电子表格:
1, Ant
2, Brown Bear (note whitespace)
3, Cat
4, Dinosaur
和文件夹
C:\Directory\1\
C:\Directory\2\
C:\Directory\4\
有没有办法放入批处理文件或vbs文件或该目录中哪些适当的工具可以使用电子表格重命名这些文件夹?最终结果是:
C:\Directory\1 Ant\
C:\Directory\2 Brown Bear\
C:\Directory\4 Dinosaur\
到目前为止,我有一个批处理文件,它将一个字符串附加到它运行的目录中的所有文件夹中(在运行它时要小心),但我只是使用if语句来处理许多项目。有关如何将其连接到csv文件的任何建议吗?
@echo off
for /f "tokens=1,2,* delims=,(" %%a in ('dir /a:d /b') do (
if "%%a" == "10" ( ren "%%a" "%%a Elephant" )
if "%%a" == "11" ( ren "%%a" "%%a Otter")
)
提前致谢。
答案 0 :(得分:3)
你的问题中有几个不明确的要点(比如姓名:它们是在电子表格中还是在.csv文件中?)所以我做了一些假设。给定带有此内容的names.csv文件:
1, Ant
2, Brown Bear
3, Cat
4, Dinosaur
下面的批处理文件实现了您想要的重命名:
@echo off
setlocal EnableDelayedExpansion
rem Load the array of equivalences from names.csv file:
for /F "tokens=1* delims=," %%a in (names.csv) do set "name[%%a]=%%b"
rem Rename the folders:
cd C:\Directory
for /F "delims=" %%a in ('dir /A:D /B') do ECHO ren "%%a" "%%a!name[%%a]!"
以前的批处理文件 show ren
命令;如果输出看起来不错,请删除ECHO
部分以执行命令。
如果names.csv文件的第一行有标题,请插入" skip = 1"之前"代币"在第一个for /F ...
命令中。
答案 1 :(得分:1)
好吧,如果您使用Powershell,那么这个小脚本可以提供帮助:
$invocation = (Get-Variable MyInvocation).Value
$directorypath = Split-Path $invocation.MyCommand.Path
Import-Csv "D:\Test\ps\look_up.csv" |`
ForEach-Object {
$old = $directorypath + "\" + $_.orig
if(Test-Path($old)){
$newPath = $directorypath + "\" +$_.orig + " " + $_.new
ren $old $newPath
}
}
我在与脚本相同的文件夹中有一个名为1,2,3
的文件夹,以及一个包含以下内容的csv文件:
orig, new
1, buga boo
2, bla
3, bu
4, none
运行脚本后,文件夹名为
Name
----
1 buga boo
2 bla
3 bu