将文件名复制到相同编号的文件

时间:2018-05-23 08:59:50

标签: filenames

所以这个描述有点含糊,所以我会用一张图片:

enter image description here

我有大约150个与SVG具有相同内容的DWG文件(它们都是1到1的矢量绘图格式)。我想将相同的文件名从DWG应用到以相同数字开头的SVG。

所以我最终得到了:

001_TERMINAL.dwg
001_TERMINAL.svg
002_DIFFUSER.dwg
002_DIFFUSER.svg

...诸如此类

我正在使用装有Windows 10的电脑。

如何实施问题解决方案? 谢谢!

3 个答案:

答案 0 :(得分:1)

假设* .svg文件名中总是有3位数字:

set DIR=C:\mydir

@rem Allow repeated setting of !variables! in the FOR loop below
setlocal enabledelayedexpansion

for %%I in (%DIR%\*.dwg) do (
  @rem "~n" to pick out just the filename part of the %%I variable
  set BASENAME=%%~nI

  @rem Substring - batch file style
  set PREFIX=!BASENAME:~0,3!

  echo !PREFIX! ... !BASENAME!
  rename !PREFIX!.svg !BASENAME!.svg
)

请注意,这需要在批处理文件中才能使%%I生效。

主要的复杂因素是在多行FOR循环中使用变量。

对于这些,您必须使用延迟扩展选项,以便每次都可以扩展变量,而不是在解析行时。这意味着您必须在批处理文件中使用!variable!而不是更正常的%variable%

答案 1 :(得分:0)

使用bash:

#!/bin/bash
for f in *.dwg; do
    IFS='_' read -r -a arr <<< "$f"
    mv ${arr[0]}.svg ${f%.*}.svg
done

答案 2 :(得分:0)

因为您使用的是Windows,所以PowerShell是解决此问题的绝佳选择。

对于下面的脚本,下划线字符前面的数字部分的长度并不重要,只要.dwg文件名中有下划线,如问题中所示。

只需更换&#39; c:\ folder&#39;下面是文件存储路径。

$folderPath = "c:\folder" 

$files = Get-ChildItem ([System.IO.Path]::Combine($folderPath, "?*_*.dwg"))

for ($i=0; $i -lt $files.Count; $i++) 
{
    $file = $files[$i]    
    $dwgFileName = $file.BaseName
    $index = $dwgFileName.IndexOf("_")    
    $numberPart = $dwgFileName.Substring(0, $index)
    $svgFilePath = [System.IO.Path]::Combine($folderPath, "$numberPart.svg")

    if ([System.IO.File]::Exists($svgFilePath))
    {
        Rename-Item -Path $svgFilePath -NewName "$dwgFileName.svg"
    }
}