删除文件名长于x的文件

时间:2015-09-04 20:42:08

标签: batch-file filenames delete-file buffer-overrun

我正在寻找帮助创建BAT文件以帮助删除特定文件名长度的视频和图像。

一些背景知识:

我们有一个定制的应用程序,我们没有源代码。它会从Feed中更新其视频。最近我们一直在检测到缓冲区溢出"错误。我们认为超过90个字符的文件名正在成为一个问题。

我想在它们成为问题之前删除这些WMV和JPG文件。我们通常使用bat文件来执行这些小任务。

3 个答案:

答案 0 :(得分:1)

我认为这是最简单的方法:

@echo off
setlocal EnableDelayedExpansion

for %%a in (*.WMV *.JPG) do (
   set "filename=%%a"
   if "!filename:~90!" neq "" (
      ECHO del "%%a"
   )
)

答案 1 :(得分:0)

不要使用特定于操作系统的东西,使用可在任何平台上运行的脚本语言,例如: Node.js的

var fs = require("fs");

var folderName = __dirname;  // for current folder
var maxlength = 90;

function getFiles(dir, files_) {
    files_ = files_ || [];
    var files = fs.readdirSync(dir);
    for ( var i in files) {
        var name = dir + '/' + files[i];
        if (fs.statSync(name).isDirectory()) {
            getFiles(name, files_);
        } else {
            files_.push(name);
        }
    }
    return files_;
}

var files = getFiles(folderName);
console.log(files);
for (var i = 0; i < files.length; i++) {
    filename = files[i];
    if (filename.length > maxlength) {
        console.log("Deleting " + filename);
        fs.unlinkSync(filename);
    }
}

答案 2 :(得分:0)

没有外部工具(未经测试):

@echo off

rem:::: set the correct directory
set "rootdir=c:\somewhere"
pushd "%rootdir%"

setlocal enableDelayedExpansion

for %%# in (*.WMV *.JPG) do (

    call ::strlen0 "%%~nx#" len
    if !len! GEQ 90 (
        rem:::: remove the echo if the correct files are listed
        echo del /q /f "%%~nx#"
    )

)

endlocal



exit /b 0
:strlen0  StrVar  [RtnVar]
  setlocal EnableDelayedExpansion
  set "s=#!%~1!"
  set "len=0"
  for %%N in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
    if "!s:~%%N,1!" neq "" (
      set /a "len+=%%N"
      set "s=!s:~%%N!"
    )
  )
  endlocal&if "%~2" neq "" (set %~2=%len%) else echo %len%
exit /b

注意评论 - 这些是您需要更改脚本的地方。