2016-01-06 170 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 

重命名部分是我迷路的地方。一旦在T:\驅動器上創建了文件夾,應該重新命名文件夾幷包含子文件夾和文件。

例如,

  1. 例行提示設置variableA的 「輸入項目編號:」
  2. 用戶輸入variableA的定義, 「EP-001」
  3. 例程驗證的變化是大約「所有文件夾和文件的項目編號將重新命名爲:'EP-001'是否爲正確的Y/N?」「(y =確認更改並繼續執行步驟4. n =重新輸入項目編號)
  4. 這個程序取代了00-000-NewProject文件夾中包含有variableA的

是我的想法可能與Windows CMD的(00-000)的任何實例?我想避免安裝任何第三方應用程序,因爲更新和維護可能在一家100人的公司中變得毛骨悚然。任何幫助將不勝感激,但任何建議的代碼的進一步解釋將是最有用的自學如何編程。先謝謝你!

+0

什麼,具體來說,你需要幫助嗎?如何提示用戶輸入數據,您需要幫助嗎?如何做字符串替換?現在這個問題非常廣泛而且有效:「請爲我做我的工作」。如果您嘗試繼續下去,或者展示更多你所做的事情,並提出具體問題,那麼幫助你會更容易。 – Guildencrantz

+0

@guildencrantz感謝您的回覆。我需要如何提示用戶輸入數據。其實我問是否有人可以爲我寫這樣一個程序,但我也希望有人解釋它的寫法的組成部分,以便我可以通過我瞭解的某個例子來學習自己。 – bryeguy

+0

歡迎來到SO,但只是提供需求並要求代碼在這裏脫離主題。我們很樂意回答具體問題,並幫助您解決特定問題,但這不是申請自定義代碼的地方。 – Guildencrantz

回答

0

我相信這是你正在嘗試做的,但作爲@Guildencrantz提到,您可能需要進一步澄清有關項目結構,文件,你只意味着文件名,目錄等

例如批處理文件

要使用,重命名d:\測試到你的T:目錄,去除回聲語句,以便執行命令等

@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) 
    }