<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Переименование папок по маске]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9789&amp;type=atom" />
	<updated>2020-09-25T19:15:22Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9789</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Переименование папок по маске]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142315#p142315" />
			<content type="html"><![CDATA[<p>Можно так:<br /></p><div class="codebox"><pre><code>Option Explicit

Dim strSourceFolder

Dim objRootFolder
Dim i
Dim strSubFolder


strSourceFolder = &quot;c:\test&quot;

With WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)
	If .FolderExists(strSourceFolder) Then
		Set objRootFolder = .GetFolder(strSourceFolder)
		
		For i = 1000 To 4000
			strSubFolder = .BuildPath(.BuildPath(objRootFolder.Path, CStr(i)), &quot;number&quot;)
			
			If .FolderExists(strSubFolder) Then
				.GetFolder(strSubFolder).Name = &quot;userNumber&quot;
			Else
				WScript.Echo &quot;Can&#039;t find subfolder [&quot; &amp; strSubFolder &amp; &quot;].&quot;
			End If
		Next
		
		Set objRootFolder = Nothing
	Else
		WScript.Echo &quot;Source folder [&quot; &amp; strSourceFolder &amp; &quot;] not found.&quot;
		WScript.Quit 1
	End If
End With

WScript.Quit 0
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2020-09-25T19:15:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142315#p142315</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Переименование папок по маске]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142268#p142268" />
			<content type="html"><![CDATA[<p>Хочу еще добавить, что уровень залегания папки &quot;number&quot; всегда один и тот же. Если папку &quot;test&quot; считаем корнем, то уровень залегания - вторая.<br />Например:<br />C:\test\1001\number\533\<br />C:\test\1002\number\567\<br />C:\test\1003\number\235\<br />C:\test\1004\number\878\<br />и т.д.<br />То есть первая папка после &quot;test&quot;, которая числовая - всегда переменная<br />Вторая папка &quot;number&quot;, которую нужно переименовать - всегда постоянная.</p><p>Нашел аналогичное решение с помощью батча. Но хотелось бы также реализовать через VBS.</p><div class="codebox"><pre><code>
@echo off
for /f &quot;tokens=* delims=&quot; %%a in (&#039;dir /ad/b &quot;C:\test&quot;&#039;) do (
    ren &quot;C:\test\%%a\number&quot; &quot;userNumber&quot;
)
pause
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[smarton]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41096</uri>
			</author>
			<updated>2020-09-23T06:16:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142268#p142268</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Переименование папок по маске]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142264#p142264" />
			<content type="html"><![CDATA[<p><strong>alexii</strong>,<br />есть список папок с числовым значением от 1000 до 4000 (этот список папок я положил в общую папку &quot;test&quot; на диск C),<br />в каждой папке с числовым значением лежит подпапка &quot;number&quot;,<br />в каждой подпапке &quot;number&quot; лежат подпапки с другими именами, но они нас не интересуют.</p><p>Задача: просканировать все папки и подпапки, которые лежат по пути &quot;C:\test&quot;, найти там подпапку c именем &quot;number&quot; и переименовать ее в &quot;userNumber&quot;<br />Скрипт, написанный выше, переименовывает папки верхнего уровня (то есть которые лежат в корне &quot;C:\test&quot;), но не переименовывает подпапки (субпапки), которые лежат глубже, в других папках. Нужно, чтобы скрипт сканировал все подпапки и находил нужную для ее переименования.<br />Буду очень благодарен помощи.</p>]]></content>
			<author>
				<name><![CDATA[smarton]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41096</uri>
			</author>
			<updated>2020-09-22T21:26:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142264#p142264</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Переименование папок по маске]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142263#p142263" />
			<content type="html"><![CDATA[<p><strong>smarton</strong>, попробуйте описать задачу подробнее, можете на примере.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2020-09-22T21:02:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142263#p142263</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Переименование папок по маске]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142258#p142258" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Я же писал — словарь. Пробуйте (не проверялось):<br /></p><div class="codebox"><pre><code>Option Explicit

Dim strSourceFolder

Dim objDictionary
Dim objFolder


strSourceFolder = &quot;d:\2\look&quot;

Set objDictionary = WScript.CreateObject(&quot;Scripting.Dictionary&quot;)

With objDictionary
    .Add &quot;111&quot;, &quot;папка1&quot;
    .Add &quot;222&quot;, &quot;папка2&quot;
    .Add &quot;333&quot;, &quot;папка3&quot;
    .Add &quot;444&quot;, &quot;папка4&quot;
End With

With WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)
    If .FolderExists(strSourceFolder) Then
        For Each objFolder In .GetFolder(strSourceFolder).SubFolders
            If objDictionary.Exists(objFolder.Name) Then
                If Not .FolderExists(.BuildPath(strSourceFolder, objDictionary.Item(objFolder.Name))) Then
                    objFolder.Name = objDictionary.Item(objFolder.Name)
                Else
                    WScript.Echo &quot;Folder [&quot; &amp; objDictionary.Item(objFolder.Name) &amp; &quot;] already exists in folder [&quot; &amp; strSourceFolder &amp; &quot;].&quot;
                End If
            End If
        Next
    Else
        WScript.Echo &quot;Source folder [&quot; &amp; strSourceFolder &amp; &quot;] not found.&quot;
        WScript.Quit 1
    End If
End With

objDictionary.RemoveAll
Set objDictionary = Nothing

WScript.Quit 0
</code></pre></div></blockquote></div><p>Здравствуйте.<br />Данный скрипт практически идеально подходит для моих задач, но он не переименовывает подпапки. <br />В моей задаче нужно переименовать подпапки с именем &quot;number&quot; на имя &quot;uNumber&quot;? Подпапки &quot;number&quot; находятся в папках с разным именем.<br />Например,<br />папка 3401 =&gt; подпапка number<br />папка 3402 =&gt; подпапка number<br />папка 3403 =&gt; подпапка number<br />и т.д.<br />Прошу помочь добавить правило, при котором будет происходить переименование в подпапках.</p>]]></content>
			<author>
				<name><![CDATA[smarton]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41096</uri>
			</author>
			<updated>2020-09-22T17:58:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142258#p142258</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Переименование папок по маске]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=84661#p84661" />
			<content type="html"><![CDATA[<p>Большое спасибо, это именно то, что нужно. Хорошо что есть такие форумы и люди.</p>]]></content>
			<author>
				<name><![CDATA[Djdfy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3418</uri>
			</author>
			<updated>2014-07-10T05:17:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=84661#p84661</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Переименование папок по маске]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=84650#p84650" />
			<content type="html"><![CDATA[<p>Я же писал — словарь. Пробуйте (не проверялось):<br /></p><div class="codebox"><pre><code>Option Explicit

Dim strSourceFolder

Dim objDictionary
Dim objFolder


strSourceFolder = &quot;d:\2\look&quot;

Set objDictionary = WScript.CreateObject(&quot;Scripting.Dictionary&quot;)

With objDictionary
    .Add &quot;111&quot;, &quot;папка1&quot;
    .Add &quot;222&quot;, &quot;папка2&quot;
    .Add &quot;333&quot;, &quot;папка3&quot;
    .Add &quot;444&quot;, &quot;папка4&quot;
End With

With WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)
    If .FolderExists(strSourceFolder) Then
        For Each objFolder In .GetFolder(strSourceFolder).SubFolders
            If objDictionary.Exists(objFolder.Name) Then
                If Not .FolderExists(.BuildPath(strSourceFolder, objDictionary.Item(objFolder.Name))) Then
                    objFolder.Name = objDictionary.Item(objFolder.Name)
                Else
                    WScript.Echo &quot;Folder [&quot; &amp; objDictionary.Item(objFolder.Name) &amp; &quot;] already exists in folder [&quot; &amp; strSourceFolder &amp; &quot;].&quot;
                End If
            End If
        Next
    Else
        WScript.Echo &quot;Source folder [&quot; &amp; strSourceFolder &amp; &quot;] not found.&quot;
        WScript.Quit 1
    End If
End With

objDictionary.RemoveAll
Set objDictionary = Nothing

WScript.Quit 0
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2014-07-09T14:41:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=84650#p84650</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Переименование папок по маске]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=84648#p84648" />
			<content type="html"><![CDATA[<p>Дело в том, что мне нужно как то задать соответствие старого имени папки и нового,<br />например:<br />папку с именем &quot;111&quot; скрипт должен переименовать в папку с именем &quot;папка1&quot; т.е. хотелось бы чтобы вначале скрипта можно было задать список соответствия имен, что то типа:<br />set 111 = &quot;папка1&quot;<br />set 222 = &quot;папка2&quot;<br />set 333 = &quot;папка3&quot;<br />и т.д. примерно 40 папок.<br />т.е. если скрипт находит папку с именем &quot;111&quot; он ее переименовывает в &quot;папка1&quot; и т.д.<br />Хотелось бы чтобы этот список был где то вначале скрипта, потому что список этих папок нужно будет время от времени менять.</p><div class="quotebox"><cite>alexii пишет:</cite><blockquote><p> опишите принципы, по которым будет строиться соответствие.</p></blockquote></div><p>принципов никаких нет, нужно просто задать жесткое соответствие начального имени папки и конечного.</p>]]></content>
			<author>
				<name><![CDATA[Djdfy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3418</uri>
			</author>
			<updated>2014-07-09T09:46:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=84648#p84648</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Переименование папок по маске]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=84647#p84647" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Нужно как то задать соответствие старых и новых имен</p></blockquote></div><p>Перечень соответствия известен? Используйте словарь. Если нет — то опишите принципы, по которым будет строиться соответствие.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2014-07-09T09:33:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=84647#p84647</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: Переименование папок по маске]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=84643#p84643" />
			<content type="html"><![CDATA[<p>Здравствуйте, помогите пожалуйста решить задачу, есть несколько папок с именами 111, 222, 333, 444 их нужно переименовать, например, в папка1, папка2, папка3, папка4 но каждое новое имя должно соответствовать определенному старому имени, т.е. папка с именем &quot;111&quot; должна всегда переименовываться в &quot;папка1&quot;, &quot;222&quot; в &quot;папка2&quot; и т.д Нужно как то задать соответствие старых и новых имен, а как это сделать ума не приложу. Сразу скажу, что познания в написании скриптов у меня небольшие, пока что смог написать только это:</p><div class="codebox"><pre><code>set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
look = &quot;d:\2\look\&quot;
out = &quot;d:\2\out\&quot;                     
set lookDir = FSO.GetFolder(look)
set outDir = FSO.GetFolder(out)
    for each subFolder in lookDir.subFolders
        NewName = FSO.GetBaseName(subFolder.Name)
        msgbox NewName
    next
set FSO = Nothing</code></pre></div><p>знаю что это ниочем, так что сильно не ругайте.</p>]]></content>
			<author>
				<name><![CDATA[Djdfy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3418</uri>
			</author>
			<updated>2014-07-09T05:43:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=84643#p84643</id>
		</entry>
</feed>
