2016-01-06 11 views
-1

Я новичок в программировании и программировании и пытаюсь создать простую процедуру 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 

Часть переименования, где я теряюсь. После того, как папка 00-000-NewProject была создана на диске T: \, пришло время переименовать папку и включить в нее подпапки и файлы.

Например,

  1. Плановые подсказки установить variableA "Введите номер проекта:"
  2. Пользователь вводит variableA определения, "EP-001"
  3. Рутинные проверяют изменения, которые собираются «Номер проекта для всех папок и файлов будет переименован в:« EP-001 »- это правильный Y/N?» (y = подтвердить изменения и перейти к шагу 4. n = повторить номер проекта)
  4. Эта процедура заменяет любой экземпляр (00-000), содержащихся в папке 00-000-новыйПроект с VariableA

Является ли моя идея возможно с окнами CMD? Я хотел бы избежать установки каких-либо сторонних приложений, так как обновления и техническое обслуживание могут стать волосатыми в фирме на 100 человек. Любая помощь будет принята с благодарностью, но дальнейшее объяснение любого предлагаемого кода было бы наиболее полезным в обучении программированию. Заранее спасибо!

+0

Что вам нужно, в частности, здесь? Вам нужна помощь в том, как запрашивать у пользователя данные? Как выполнить замену строк? Сейчас вопрос очень широк и эффективен: «Пожалуйста, сделайте мою работу для меня». Если вы попытаетесь продолжить работу или показать больше того, что вы сделали, и задайте конкретные вопросы, вам будет легче помочь вам. – Guildencrantz

+0

@guildencrantz Спасибо за ответ. Мне нужна помощь в том, как запрашивать данные пользователя. Я на самом деле спрашиваю, может ли кто-нибудь написать такую ​​программу для меня, но я также хотел бы, чтобы кто-то объяснил компоненты того, как она была написана, чтобы я мог узнать для себя пример того, что я понимаю. – bryeguy

+0

добро пожаловать в SO, но просто предоставляя требования и запрашивая код вне темы. Мы с удовольствием отвечаем на конкретные вопросы и помогаем вам с определенными проблемами, но это не место для заказа пользовательского кода. – Guildencrantz

ответ

0

Я считаю, что это то, что вы пытаетесь сделать, но, как говорится @Guildencrantz, возможно, потребуется дополнительно уточнить о структуре проекта, файлы, вы имели в виду имена файлов только, каталоги и т.д.

Пример пакетного файла

Для использования, переименовать D: \ тест на ваш т: каталог, удалить эхо-операторы так команды выполняют и т.д.

@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 
+0

Спасибо, что ответили. Я хочу понять проект, который переименовал бы каждый экземпляр 00-000 в каталог, включая папки, подпапки и файлы. – bryeguy

+0

Кроме того, если у вас есть время, можете ли вы объяснить код, который вы выписали здесь, чтобы я мог лучше понять ваши усилия? – bryeguy

+0

Было бы лучше разбить код на несколько программ здесь? 1 для дублирования папки, 1 программы для переименования папок и 1 программы для переименования файлов? – bryeguy

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) 
    } 
Смежные вопросы