Windows中的哪个命令可以模拟Unix上的递归移动/重命名命令?
Windows中的哪个命令可以模拟Unix上的递归移动/重命名命令?
Answers:
使用XP的for
命令。例如,从命令行(在批处理文件中使用%%x
)进行递归移动,请执行以下操作:
for /r %x in (foo) do move "%x" "drive:\path\bar"
要进行递归重命名,请执行以下操作:
for /r %x in (*.c) do ren "%x" *.cpp
批处理示例:
for /r "< DIR >" %%x in (*.c) do ren "%%x" *.cpp
*.*
?
robocopy "C:\Source Folder" "C:\Destination Folder" /E /COPYALL /XJ
Description of parameters:
/E - copy subdirectories, including Empty ones (/S to exclude empty ones)
/COPYALL - COPY ALL file info (equivalent to /COPY:DATSOU)
/XJ - eXclude Junction points and symbolic links. (normally included by default).
我只是使用move命令在Windows XP SP2框中运行了一个小示例,它可以工作。所有文件和目录都从源移动到了目的地。source和dest是目录名。
移动源目标
版本 Microsoft Windows XP [版本5.1.2600]
移动/? 移动文件并重命名文件和目录。 要移动一个或多个文件: 移动[/ Y | / -Y] [驱动器:] [路径] filename1 [,...]目标 重命名目录: 移动[/ Y | / -Y] [驱动器:] [路径] dirname1 dirname2 [drive:] [path] filename1指定文件的位置和名称 或您要移动的文件。 destination指定文件的新位置。目的地 可以包含驱动器号和冒号, 目录名称,或其组合。如果你要搬家 仅一个文件,如果还可以包含文件名 您要在移动文件时重命名文件。 [drive:] [path] dirname1指定要重命名的目录。 dirname2指定目录的新名称。 / Y禁止提示您确认要 覆盖现有的目标文件。 / -Y提示您确认要覆盖 现有的目标文件。 开关/ Y可能存在于COPYCMD环境变量中。 在命令行上可以使用/ -Y覆盖它。默认为 提示覆盖,除非正在执行MOVE命令 在批处理脚本中。
for /r %%x in (%1) do ren "%%x" %2
这将递归重命名文件:-)
保存在文件中,给扩展名和扩展名两个参数。
例如:文件名为test.bat命令:test * .avi * .bmp
它将所有扩展名为avi的文件重命名为bmp(在所有子文件夹中:)
注意:这是10月26日13:20回答的问题。他放弃了
/r %x in (*.c) do ren "%x" *.cpp
当它颤抖的地方是%%而不是%
这对我来说更好:
FOR /R "C:\folder1\folder2\" %i in (.,*) DO MOVE /Y "%i" "C:\folder1\"
资料来源:http : //www.islamadel.com/index.php/notes/6-computer/10-windows-command-line
大多数UNIX命令都有Windows端口:
我创建了一个VB脚本,该脚本可以搜索并替换目录名称...我也有文件版本,但是,我认为这足以让您开始使用自己的脚本。我使用此脚本的方式是使用fileandreplacedirs.vbs
,并将其与要重命名的文件夹放在同一文件夹中。另外,它不一定要递归到文件夹中,但可以稍作修改
search1 = InputBox("Search for...", "", "")
replace1 = InputBox("replace with...", "", "")
Dim MyFile
MyFiles = GetFileArray(".")
For Each MyFile In MyFiles
NewFilename = Replace(MyFile.Name, search1, replace1)
If InStr( MyFile.Name, search1 ) Then MyFile.Name = NewFilename
Next
MsgBox "Done..."
function GetFileArray(ByVal vPath)
'Get our objects...
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.Getfolder(vPath)
Set Files = Folder.SubFolders
'Resize the local array
'Arrays are 0 based but Files collection is 1 based.
if Files.count = 0 then
GetFileArray = array()
Exit Function
Else
Index = 0
Redim FileList(Files.Count-1)
For Each File In Files
set FileList(Index) = File
Index = Index + 1
Next
GetFileArray = FileList
End If
'Always good practice to explicitly release objects...
Set FSO = Nothing
Set Folder = Nothing
Set Files = Nothing
End function
使用一个简单的DOS命令。
cd到要递归重命名文件扩展名的源目录。
输入以下命令:
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
if exist
当文件在每个文件夹中都不存在时,我为了避免错误返回(在Jenkins中很重要,因此它不会破坏构建):
for /r %x in (foo) do if exist "%x" move "%x" "drive:\path\bar"
要进行递归重命名,请执行以下操作:
for /r %x in (*.c) do if exist "%x" ren "%x" *.cpp
批处理示例:
for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp
我发现这个python脚本也可以正常工作:
for root, dirs, files in os.walk(cur_dir):
for filename in files:
file_ext = os.path.splitext(filename)[1]
if old_ext == file_ext:
oldname = os.path.join(root, filename)
newname = oldname.replace(old_ext, new_ext)
os.rename(oldname, newname)
可以在以下网址找到:http : //gomputor.wordpress.com/2008/09/29/change-the-extension-of-multiple-files-in-a-chosen-directory-with-python/
我将Python添加到路径中,并将Python脚本放在“ utils”文件夹中。然后,我创建了一个简单的批处理脚本来运行它:rn.bat:
python \utils\rn.py %1 %2 %3
我还更新了上面的python脚本,以从命令行获取其args。rn.py:
import sys
import os
cur_dir = sys.argv[1]
old_ext = sys.argv[2]
new_ext = sys.argv[3]
#print cur_dir, old_ext, new_ext
for root, dirs, files in os.walk(cur_dir):
for filename in files:
file_ext = os.path.splitext(filename)[1]
if old_ext == file_ext:
oldname = os.path.join(root, filename)
newname = oldname.replace(old_ext, new_ext)
os.rename(oldname, newname)
最后,现在所有需要做的是这样的:
>rn . .foo .bar
要么
>rn \ .exe .txt
玩第二个吧:)