用于重命名和反转文件夹中文件的批处理文件

时间:2016-12-26 15:25:08

标签: batch-file

我有一个文件夹,其中包含.jpg个以数字命名的图像文件:

1.jpg
2.jpg
...
100.jpg

如何反转文件名,以便最后一个是第一个,即:
100.jpg变为1.jpg等等?

@echo off
setlocal enabledelayedexpansion

::get files count
set count=0
for %%x in (*.jpg) do (
 set /a count+=1
)

::rename
for /L %%a in (1,1,%count%) do (
 set /a new=101-%%a
 ren "!new!.jpg" "temp.jpg"
 ren "%%a.jpg" "!new!.jpg"
 ren "temp.jpg" "%%a.jpg"
)
endlocal

我尝试将101更改为%count%+ 1 如果总文件数超过50,则不执行此代码。

任何帮助将不胜感激。 提前谢谢!

3 个答案:

答案 0 :(得分:3)

@echo off
setlocal enabledelayedexpansion
for /L %%a in (1,1,50) do (
 set /a new=101-%%a
 ren "!new!.jpg" "temp.jpg"
 ren "%%a.jpg" "!new!.jpg"
 ren "temp.jpg" "%%a.jpg"
)

其中“temp.jpg”可以是任何尚不存在的文件名。

答案 1 :(得分:1)

我想你想要对所有编号的jpg进行排序,不仅仅是1..100 排序(反向)数字需要将它们带到一个独特的长度。

此批次通过在数字中添加10万来实现此目的 (您可以增加此值,但必须考虑第二个循环中的[0-9]的数量)

 <form>
   <input class="typeahead" type="text" placeholder="search">
   <input type="hidden" name="result" value="" />
   <input type="submit">
 </form>

由于(重新)使用相同的名称,powershell脚本也将具有中间步骤。这里有一个额外的临时扩展名.tmp:

$(function() {
  // Instantiate the Bloodhound suggestion engine
  var curr = {};
  var suggestions = new Bloodhound({
    datumTokenizer: function(datum) {
      return Bloodhound.tokenizers.whitespace(datum.value);
    },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: {
        url: 'includes/livesearch.php?key=%QUERY',       
        wildcard: '%QUERY',
        filter: function (name) {
          curr[name.name] = name.id;
            // Map the remote source JSON array to a JavaScript object array
            return $.map(name, function (name, index) {
                return index === "name" ? {
                    value: name
                } : null;
            });
        }
    }

  });
  // Initialize the Bloodhound suggestion engine
  suggestions.initialize();

  // Instantiate the Typeahead UI
  $(".typeahead").typeahead({
    hint: true,
    minLength: 2
  }, {
    limit: 7,
    displayKey: 'value',
    source: suggestions.ttAdapter(),
  })
  .on("typeahead:selected", function (e, datum) {
    $("form [name=result]").val(curr[datum.value]); // set value here
    curr = {};
  });
})

答案 2 :(得分:1)

只要您知道编号从1到最大是连续的,并且没有名为* .jpg.temp的预先存在的文件:

@echo off
setlocal enableDelayedExpansion
for /f %%N in ('dir /b /a-d *.jpg^|find /c /v ""') do set max=%%N
set N=1
for /l %%N in (1 1 %max%) do (
  ren %%N.jpg !N!.jpg.temp
  set /a N+=1
)
ren *.jpg.temp *.

如果编号中可能存在间隙,但您希望最终结果是连续的,则需要按照LotPings描述的数字排序。我会使用JSORT.BAT - 一个混合批处理/ JScript排序实用程序,它能够以数字方式对嵌入数字进行排序。

@echo off
setlocal enableDelayedExpansion
set N=1
for /f "delims=" %%F in ('dir /b /a-d *.jpg^|jsort /n /r') do (
  ren "%%F" !N!.jpg.temp
  set /a N+=1
)
ren *.jpg.temp *.
相关问题