我是编码/编程的新手,并尝试创建一个简单的robocopy例程,自动将模板项目文件夹从一个位置复制到主项目驱动器,然后重命名该文件夹的“00-000”部分(始终位于名称的开头)并包含基于用户指定变量的子文件夹和文件。这是我的robocopy程序的样子。
echo off
robocopy "C:\Program Files\Autodesk\ACAD_Config\00-000-NewProject" "T:\Projects" /xd Dfsrprivate /s /e /W:0 /xd DfsrPrivate /r:0 /np
重命名部分是我迷路的地方。在T:\驱动器上创建 00-000-NewProject 文件夹后,应该重命名该文件夹并包含子文件夹和文件。
例如,
我的想法可以用于Windows CMD吗?我想避免安装任何第三方应用程序,因为更新和维护可能会在一个100人的公司中变得毛茸茸。任何帮助将不胜感激,但任何建议的代码的进一步解释将最有助于教我自己如何编程。提前谢谢!
答案 0 :(得分:0)
我相信这是你要做的,但正如@Guildencrantz所提到的,你可能需要进一步澄清你的项目结构,文件,你的意思是文件名,目录等等。
批处理文件示例
要使用,请将d:\ test重命名为t:目录,删除echo语句以执行命令等。
@echo off
setlocal enabledelayedexpansion
set variableA=EP-001
set newfolder=%variableA%-NewProject
echo robocopy "C:\Program Files\Autodesk\ACAD_Config\00-000-NewProject" "D:\test\Projects\%newfolder%" /xd Dfsrprivate
::: rename all files under T:\Projects\%newfolder% that start with 00-000 prefix with the variableA prefix
for /r D:\test\Projects\%newfolder%\ %%f in (*) do (
::: @echo Found: %%f
set newname=%%f
call set newname=!newname:00-000=%variableA%!
@echo ren %%f !newname!
)
endlocal
示例输出:
D:\test>rename1.cmd
robocopy "C:\Program Files\Autodesk\ACAD_Config\00-000-NewProject" "D:\test\Projects\EP-001-NewProject" /xd Dfsrprivate
ren D:\test\Projects\EP-001-NewProject\00-000-one.txt D:\test\Projects\EP-001-NewProject\EP-001-one.txt
ren D:\test\Projects\EP-001-NewProject\00-000-two.txt D:\test\Projects\EP-001-NewProject\EP-001-two.txt
答案 1 :(得分:0)
我看到这是旧的。现在可能没关系,但解决这个问题很有意思。困难的地方是将目录从最远的叶子重命名为根目录。
$project_base = 'C:/src/t/bn'
$template_dir = "$($project_base)/00-000-NewProject"
$project_name_approved = $false
do {
$pn = Read-Host 'Please enter the new project name'
$new_project_dir = "$($project_base)/$($pn)-NewProject"
if (Test-Path -Path $new_project_dir) {
Write-Host "Project $($pn) already exists. Please choose another project name."
} else {
$ap = Read-Host "Rename new project to $($pn)? (Y/N)"
if ($ap -match '^y') { $project_name_approved = $true }
}
} until ($project_name_approved)
# Create the new project directory and copy template files
New-Item -ItemType Directory -Path $new_project_dir | Out-Null
Copy-Item -Path "$($template_dir)\*" -Destination $new_project_dir -Recurse -Exclude DfsrPrivate
# Rename directories first, from the longest leaf in the tree back to the shortest
$dir_names = Get-ChildItem -Recurse -Directory -Path $new_project_dir |
Sort-Object -Property Length -Descending |
ForEach-Object {
$fn = Split-Path $_ -Leaf
if ($fn -match '^00-000') {
Rename-Item -Path $_.FullName -NewName "$($fn -replace '^00-000', $pn)"
}
}
Get-ChildItem -Path $new_project_dir -File -Recurse |
ForEach-Object {
Rename-Item -Path $_.FullName -NewName $($_.Name -replace '00-000', $pn)
}