@yaohaixiao/renames.js 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,12 @@
1
+ ## <small>0.0.2 (2026-02-08)</small>
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
package/README.md CHANGED
@@ -6,14 +6,20 @@ renames.js - 基于 Node 的批量文件名重命名 cli 工具库。
6
6
 
7
7
  - 方便快捷,配置灵活;
8
8
  - 支持指定文件名列表数据或者文件名列表文件;
9
- - 支持文件名自动生成索引;
10
- - 支持文件名自定义过滤;
11
- - 支持文件名自定义排序;
12
- - 支持文件名自定义格式化;
9
+ - 支持文件名自动生成(章节)索引;
10
+ - 支持文件名自定义过滤文件;
11
+ - 支持文件名自定义文件排序;
12
+ - 支持文件名自定义格式化名;
13
13
 
14
14
  ## Usage
15
15
 
16
- renames.js 使用方式如下:
16
+ 首先需要全局安装 renames.js,命令如下:
17
+
18
+ ```bash
19
+ npm i -g @yaohaixiao/renames.js
20
+ ```
21
+
22
+ 全局安装完成后,我们就可以在命令行使用了,renames.js 使用方式如下:
17
23
 
18
24
  ```bash
19
25
  renames [arguments|command] [options]
@@ -154,7 +160,7 @@ filter 参数可以用来过滤 dirPath 文件夹中的文件,例如 C:\Downlo
154
160
 
155
161
  ```js
156
162
  // renames.js 内部提供的功能函数
157
- import getExtension from '@yaohaixiao/renames.js/lib/utils/get-extension';
163
+ import getExtension from '@yaohaixiao/renames.js/lib/utils/get-extension.js';
158
164
 
159
165
  export default {
160
166
  dirPath: 'C:\\Downloads',
@@ -193,7 +199,7 @@ export default {
193
199
 
194
200
  ```js
195
201
  // renames.js 内部提供的功能函数
196
- import getBasename from '@yaohaixiao/renames.js/lib/utils/get-basename';
202
+ import getBasename from '@yaohaixiao/renames.js/lib/utils/get-basename.js';
197
203
 
198
204
  export default {
199
205
  dirPath: 'C:\\Downloads',
@@ -222,7 +228,7 @@ format 参数可以对文件夹中的文件进行格式化,例如 C:\Downloads
222
228
 
223
229
  ```js
224
230
  // renames.js 内部提供的功能函数
225
- import stripNonDigit from '@yaohaixiao/renames.js/lib/utils/strip-non-digit';
231
+ import stripNonDigit from '@yaohaixiao/renames.js/lib/utils/strip-non-digit.js';
226
232
 
227
233
  export default {
228
234
  dirPath: 'C:\\Downloads',
@@ -233,7 +239,467 @@ export default {
233
239
  };
234
240
  ```
235
241
 
242
+ ### Typical Use Case
243
+
244
+ 下面介绍通过调整配置 renames.config.js 的配置,实现批量重命名的一些典型的使用案例,操作起来是非常的简单的。
245
+
246
+ #### autoIndex: 'only'
247
+
248
+ 将杂乱的图片库的文件名,批量重命名为自动生成数值(升序)索引(例如:1.jpg -
249
+ 2x.jpg)的文件名,调整 renames.config.js 配置如下:
250
+
251
+ ```js
252
+ export default {
253
+ dirPath: 'C:\\Users\\robert\\Downloads\\壁纸',
254
+ namesList: '',
255
+ prefix: '',
256
+ suffix: '',
257
+ connector: '',
258
+ // 自动生成数值(升序)索引
259
+ autoIndex: 'only',
260
+ startIndex: 0,
261
+ indexPadZero: true,
262
+ indexPrefix: '第',
263
+ indexSuffix: '集',
264
+ delimiter: ':',
265
+ force: false,
266
+ extname: '',
267
+ filter: null,
268
+ sortBy: 'name',
269
+ order: 'desc',
270
+ sensitivity: 'base',
271
+ format: null,
272
+ };
273
+ ```
274
+
275
+ 然后在命令行工具执行 renames 命令,如下图:
276
+
277
+ ![autoIndex-only](./docs/img/autoIndex-only.png)
278
+
279
+ 说明:执行 renames 命令,未配置任何参数和配置参数,则执行命令时完全使用配置文件的设置。
280
+
281
+ #### startIndex
282
+
283
+ 如果你是一个爱收集壁纸的人,应该会陆续收集更多的图片,我们可以使用 startIndex 在原来的索引位置继续自动生成数值索引名称,配置如下:
284
+
285
+ ```js
286
+ export default {
287
+ dirPath: 'C:\\Users\\robert\\Downloads\\壁纸',
288
+ namesList: '',
289
+ prefix: '',
290
+ suffix: '',
291
+ connector: '',
292
+ // 自动生成数值(升序)索引
293
+ autoIndex: 'only',
294
+ // 上图中文件名的索引值已经到 29.jpg,则 startIndex 的值就是 29
295
+ startIndex: 29,
296
+ indexPadZero: true,
297
+ indexPrefix: '第',
298
+ indexSuffix: '集',
299
+ delimiter: ':',
300
+ force: false,
301
+ extname: '',
302
+ filter: null,
303
+ sortBy: 'name',
304
+ order: 'desc',
305
+ sensitivity: 'base',
306
+ format: null,
307
+ };
308
+ ```
309
+
310
+ 然后在命令行工具执行 renames 命令,如下图:
311
+
312
+ ![startIndex](./docs/img/startIndex.png)
313
+
314
+ #### indexPadZero
315
+
316
+ 细心的朋友应该发现文件名 01.jpg,自动用‘0’填充。使用的就是 indexPadZero 这个配置参数。 现在将文件夹的图片文件数量增加到100以上,看看索引使用自动填充‘0’后的效果,配置如下:
317
+
318
+ ```js
319
+ export default {
320
+ dirPath: 'C:\\Users\\robert\\Downloads\\壁纸',
321
+ namesList: '',
322
+ prefix: '',
323
+ suffix: '',
324
+ connector: '',
325
+ // 自动生成数值(升序)索引
326
+ autoIndex: 'only',
327
+ startIndex: 0,
328
+ // 使用 '0' 自动填充
329
+ indexPadZero: true,
330
+ indexPrefix: '第',
331
+ indexSuffix: '集',
332
+ delimiter: ':',
333
+ force: false,
334
+ extname: '',
335
+ filter: null,
336
+ sortBy: 'name',
337
+ order: 'desc',
338
+ sensitivity: 'base',
339
+ format: null,
340
+ };
341
+ ```
342
+
343
+ 然后在命令行工具执行 renames 命令,如下图:
344
+
345
+ ![indexPadZero](./docs/img/indexPadZero.png)
346
+
347
+ 当然,如果没有强迫症,不希望文件名的长度一致,我们也可以关闭 indexPadZero,配置如下:
348
+
349
+ ```js
350
+ export default {
351
+ dirPath: 'C:\\Users\\robert\\Downloads\\壁纸',
352
+ namesList: '',
353
+ prefix: '',
354
+ suffix: '',
355
+ connector: '',
356
+ // 自动生成数值(升序)索引
357
+ autoIndex: 'only',
358
+ startIndex: 0,
359
+ // 使用 '0' 自动填充
360
+ indexPadZero: false,
361
+ indexPrefix: '第',
362
+ indexSuffix: '集',
363
+ delimiter: ':',
364
+ force: false,
365
+ extname: '',
366
+ filter: null,
367
+ sortBy: 'name',
368
+ order: 'desc',
369
+ sensitivity: 'base',
370
+ format: null,
371
+ };
372
+ ```
373
+
374
+ 然后在命令行工具执行 renames 命令,如下图:
375
+
376
+ ![indexPadZero-false](./docs/img/indexPadZero-false.png)
377
+
378
+ 可以看到,关闭后就不会使用‘0’自动填充了。
379
+
380
+ #### prefix、suffix、connector
381
+
382
+ 接着我们可以对以上重命名好的文件名再继续调整,使用 prefix、suffix、connector 这3个配置参数,添加前缀和后缀,配置如下:
383
+
384
+ ```js
385
+ export default {
386
+ dirPath: 'C:\\Users\\robert\\Downloads\\壁纸',
387
+ namesList: '',
388
+ prefix: 'wallpaper',
389
+ suffix: '1080p',
390
+ connector: '-',
391
+ // 关闭自动生成数值索引(升序)
392
+ autoIndex: false,
393
+ startIndex: 0,
394
+ indexPadZero: true,
395
+ indexPrefix: '第',
396
+ indexSuffix: '集',
397
+ delimiter: ':',
398
+ force: false,
399
+ extname: '',
400
+ filter: null,
401
+ sortBy: 'name',
402
+ order: 'desc',
403
+ sensitivity: 'base',
404
+ format: null,
405
+ };
406
+ ```
407
+
408
+ 然后在命令行工具执行 renames 命令,如下图:
409
+
410
+ ![prefix-suffix-connector](./docs/img/prefix-suffix-connector.png)
411
+
412
+ #### filter
413
+
414
+ 接着我们使用 filter 配置参数,进一步对上面重命名的文件再操作,我们将图片中的 .png 格式的图片再批量处理以下,配置如下:
415
+
416
+ ```js
417
+ // renames.js 内部提供的功能函数
418
+ import getExtension from '@yaohaixiao/renames.js/lib/utils/get-extension';
419
+
420
+ export default {
421
+ dirPath: 'C:\\Users\\robert\\Downloads\\壁纸',
422
+ namesList: '',
423
+ prefix: 'wallpaper',
424
+ // 添加 png 的后缀
425
+ suffix: 'png',
426
+ connector: '-',
427
+ // 针对 png 图片生成自动索引的文件名
428
+ autoIndex: 'only',
429
+ startIndex: 0,
430
+ indexPadZero: true,
431
+ indexPrefix: '第',
432
+ indexSuffix: '集',
433
+ delimiter: ':',
434
+ force: false,
435
+ extname: '',
436
+ // 过滤 .png 图片
437
+ filter: (files) => {
438
+ return files.filter((filename) => {
439
+ const extname = getExtension(filename);
440
+ return extname === '.png';
441
+ });
442
+ },
443
+ sortBy: 'name',
444
+ order: 'desc',
445
+ sensitivity: 'base',
446
+ format: null,
447
+ };
448
+ ```
449
+
450
+ 然后在命令行工具执行 renames 命令,如下图:
451
+
452
+ ![filter](./docs/img/filter.png)
453
+
454
+ #### format
455
+
456
+ 接下来,我们将使用 format 参数,将上面我们使用 filter 参数将 .png 格式的图片的后缀再改成 1080p,配置如下:
457
+
458
+ ```js
459
+ // renames.js 内部提供的功能函数
460
+ import getExtension from '@yaohaixiao/renames.js/lib/utils/get-extension';
461
+
462
+ export default {
463
+ dirPath: 'C:\\Users\\robert\\Downloads\\壁纸',
464
+ namesList: '',
465
+ // 清空前后缀的配置,我们现在的操作是仅修改原来的文件名
466
+ prefix: '',
467
+ suffix: '',
468
+ connector: '',
469
+ // 关闭自动索引也是因为需要仅修改原始的文件名
470
+ autoIndex: false,
471
+ startIndex: 0,
472
+ indexPadZero: true,
473
+ indexPrefix: '第',
474
+ indexSuffix: '集',
475
+ delimiter: ':',
476
+ force: false,
477
+ extname: '',
478
+ // 过滤 .png 图片,也可以配置过滤,那工具会遍历所有的文件,
479
+ // 为了性能,我们还是保留 filter 配置
480
+ filter: (files) => {
481
+ return files.filter((filename) => {
482
+ const extname = getExtension(filename);
483
+ return extname === '.png';
484
+ });
485
+ },
486
+ sortBy: 'name',
487
+ order: 'desc',
488
+ sensitivity: 'base',
489
+ format: (basename) => {
490
+ return basename.replace('png', '1080p');
491
+ },
492
+ };
493
+ ```
494
+
495
+ 然后在命令行工具执行 renames 命令,如下图:
496
+
497
+ ![format](./docs/img/format.png)
498
+
499
+ #### nameList、sortBy
500
+
501
+ 前面介绍的都是直接修改原来的文件名的方式来重命名,namesList 则可以通过外部数据将定义好的文件名结合 sortBy 将文件的顺序调整跟 namesList 中的数据一致,进行批量重命名。
502
+
503
+ 例如,我下载了《达尔文游戏》这个动漫,但下载下来的文件名是这样的:
504
+
505
+ - 1-E01-1 (1).mp4
506
+ - 10-E09 (1).mp4
507
+ - 11-E10 (1).mp4
508
+ - 12-E11 (1).mp4
509
+ - 2-E01-2 (1).mp4
510
+ - 3-E02 (1).mp4
511
+ - 4-E03 (1).mp4
512
+ - 5-E04 (1).mp4
513
+ - 6-E05 (1).mp4
514
+ - 7-E06 (1).mp4
515
+ - 8-E07 (1).mp4
516
+ - 9-E08 (1).mp4
517
+
518
+ 顺便说以下,如果直接用内置的 sortBy:
519
+ 'name' 排序,就是以上的排序结果。而我通过 AI 获取到的《达尔文游戏》其 12集的名称如下:
520
+
521
+ - 初战
522
+ - 涉谷
523
+ - 导火索
524
+ - 火花
525
+ - 记忆(特别篇)
526
+ - 水葬
527
+ - 金刚
528
+ - 压碎
529
+ - 平稳
530
+ - 决斗
531
+ - 旧王
532
+ - 血盟
533
+
534
+ 所以我需要通过自定义的 sortBy 函数处理以下,按 1-12 的索引值升序排序,配置如下:
535
+
536
+ ```js
537
+ // renames.js 内部提供的功能函数
538
+ import getBasename from './lib/utils/get-basename.js';
539
+
540
+ export default {
541
+ dirPath: 'C:\\Users\\haixi\\Downloads\\达尔文游戏',
542
+ namesList: 'C:\\Users\\haixi\\Downloads\\names.txt',
543
+ // namesList: ',初战,涉谷,导火索,火花,记忆(特别篇),水葬,金刚,压碎,平稳,决斗,旧王,血盟'
544
+ prefix: '达尔文游戏',
545
+ suffix: '1080p',
546
+ connector: '-',
547
+ autoIndex: true,
548
+ startIndex: 0,
549
+ indexPadZero: true,
550
+ indexPrefix: '第',
551
+ indexSuffix: '集',
552
+ delimiter: ':',
553
+ force: false,
554
+ extname: '',
555
+ filter: null,
556
+ // 使用自定义的排序方式
557
+ sortBy: (files) => {
558
+ return files.sort((prev, next) => {
559
+ const pattern = /-(.*)/;
560
+ // 保留文件名中的第一个字符,也就是索引值
561
+ const prevIndex = getBasename(prev).replace(pattern, '');
562
+ const nextIndex = getBasename(next).replace(pattern, '');
563
+
564
+ // 升序排列
565
+ return Number(prevIndex) - Number(nextIndex);
566
+ });
567
+ },
568
+ // 使用自定义排序函数后 order 和 sensitivity 就没有作用了
569
+ order: 'asc',
570
+ sensitivity: 'base',
571
+ format: null,
572
+ };
573
+ ```
574
+
575
+ 然后在命令行工具执行 renames 命令,如下图:
576
+
577
+ ![namesList-sortBy](./docs/img/namesList-sortBy.png)
578
+
579
+ **PS**: 这是我当初开发 renames.js 的主要目的,重命名下载的视频文件名!
580
+
581
+ ## API Documentation
582
+
583
+ renames.js 除了作为 cli 工具可以在命令行直接使用外,也额外提供了一些基础的处理获取文件信息的功能函数模块。
584
+
585
+ ### getBasename(filename) ⇒ <code>string</code>
586
+
587
+ getBasename() 方法用来获取文件名中不含扩展名的字符串。
588
+
589
+ **Kind**: global function **Returns**:
590
+ <code>string</code> - - 返回文件名中去掉扩展名部分的字符串
591
+
592
+ | Param | Type | Description |
593
+ | -------- | ------------------- | -------------------- |
594
+ | filename | <code>string</code> | 文件名(路径)字符串 |
595
+
596
+ #### Usage
597
+
598
+ ```js
599
+ import getBasename from '@yaohaixiao/renames.js/lib/utils/get-basename.js';
600
+
601
+ const filename = '1-E01-1 (1).mp4';
602
+ const basename = getBasename(filename);
603
+
604
+ console.log(basename); // -> '1-E01-1 (1)'
605
+ ```
606
+
607
+ ### getExtension(filename) ⇒ <code>string</code>
608
+
609
+ getExtension() 方法用来获取文件名中的扩展名部分字符串(含.)。
610
+
611
+ **Kind**: global function **Returns**:
612
+ <code>string</code> - - 返回文件名中扩展名部分的字符串,例如:'.jpg'
613
+
614
+ | Param | Type | Description |
615
+ | -------- | ------------------- | -------------------- |
616
+ | filename | <code>string</code> | 文件名(路径)字符串 |
617
+
618
+ #### Usage
619
+
620
+ ```js
621
+ import getExtension from '@yaohaixiao/renames.js/lib/utils/get-extension.js';
622
+
623
+ const filename = '1-E01-1 (1).mp4';
624
+ const extname = getExtension(filename);
625
+
626
+ console.log(extname); // -> '.mp4'
627
+ ```
628
+
629
+ ### isFileExists(filePath, [basePath]) ⇒ <code>boolean</code>
630
+
631
+ isFileExists() 方法用来同步检测文件是否存在,如果存在,返回 true,否则返回 false。
632
+
633
+ **Kind**: global function **Returns**:
634
+ <code>boolean</code> - - 文件存在返回 true,否则返回 false
635
+
636
+ | Param | Type | Default | Description |
637
+ | ---------- | ------------------- | ------------------------------------- | --------------------------------- |
638
+ | filePath | <code>string</code> | | 检测的文件路径 |
639
+ | [basePath] | <code>string</code> | <code>&quot;&#x27;&#x27;&quot;</code> | 可选,基础路径。. Default is `''` |
640
+
641
+ #### Usage
642
+
643
+ ```js
644
+ import isFileExists from '@yaohaixiao/renames.js/lib/utils/is-file-exists.js';
645
+
646
+ const filename = '1-E01-1 (1).mp4';
647
+ const basePath = 'C:\Users\haixi\Downloads\达尔文游戏';
648
+
649
+ // console.log(isFileExists('C:\Users\haixi\Downloads\达尔文游戏\1-E01-1 (1).mp4'))
650
+ console.log(isFileExists(filename, basePath)); // -> true
651
+ ```
652
+
653
+ ### padZero(val, [length]) ⇒ <code>string</code>
654
+
655
+ padZero() 方法用来处理对数字/字符串补零,前置补‘0’,确保返回指定长度的字符串。
656
+
657
+ **Kind**: global function **Returns**:
658
+ <code>string</code> - - 返回补零后的字符串
659
+
660
+ | Param | Type | Default | Description |
661
+ | -------- | ------------------------------------------ | -------------- | ------------------------------------------------------------ |
662
+ | val | <code>number</code> \| <code>string</code> | | 要补零的数字或字符串(如 27、'27') |
663
+ | [length] | <code>number</code> | <code>2</code> | 可选,目标总长度(如 3 → '027',4 → '0027'). Default is `2` |
664
+
665
+ #### Usage
666
+
667
+ ```js
668
+ import getBasename from '@yaohaixiao/renames.js/lib/utils/get-basename.js';
669
+ import getExtension from '@yaohaixiao/renames.js/lib/utils/get-extension.js';
670
+ import padZero from '@yaohaixiao/renames.js/lib/utils/pad-zero.js';
671
+
672
+ const filename = '1.mp4';
673
+ const finalFileName = `${padZero(getBasename(filename), 3)}${getExtension(filename)}`;
674
+
675
+ console.log(finalFileName); // -> '001.mp4'
676
+ ```
677
+
678
+ ### stripNonDigit(str) ⇒ <code>string</code>
679
+
680
+ stripNonDigit(str) 方法用来移除文本中所有非数值的文本,返回移除纯数值的字符串。
681
+
682
+ **Kind**: global function **Returns**:
683
+ <code>string</code> - - 返回移除非数值的字符串
684
+
685
+ | Param | Type | Description |
686
+ | ----- | ------------------- | ------------------ |
687
+ | str | <code>string</code> | 文件名的文本字符串 |
688
+
689
+ #### Usage
690
+
691
+ ```js
692
+ import getBasename from '@yaohaixiao/renames.js/lib/utils/get-basename.js';
693
+ import getExtension from '@yaohaixiao/renames.js/lib/utils/get-extension.js';
694
+ import stripNonDigit from '@yaohaixiao/renames.js/lib/utils/strip-non-digit.js';
695
+
696
+ const filename = '第01集:初战';
697
+ const basename = getBasename(filename);
698
+ const extname = getExtension(filename);
699
+
700
+ console.log(`${stripNonDigit(basename)}${extname}`); // -> '01.mp4'
701
+ ```
702
+
236
703
  ## License
237
704
 
238
- Licensed under
239
- [MIT License](http://opensource.org/licenses/mit-license.html).
705
+ Licensed under [MIT License](http://opensource.org/licenses/mit-license.html).
package/bin/renames.js CHANGED
@@ -162,8 +162,7 @@ const getCommonOptions = () => [
162
162
  {
163
163
  flags: '--sort, --sortBy <sortBy>',
164
164
  description:
165
- '可选,排序类型,可选项:name、type、size、birthtime 和 modify-time',
166
- defaultValue: DEFAULT_SORT,
165
+ '可选,排序类型,可选项:name、type、size、birthtime 和 modify-time(default:name)',
167
166
  },
168
167
  {
169
168
  flags: '--order <order>',
@@ -347,10 +346,12 @@ mainCommander
347
346
  // 获取最终的文件夹路径
348
347
  const finalDirPath = await getFinalDirPath(dirPath, config);
349
348
 
350
- // 合并配置并处理文件名列表
349
+ // 合并命令行输入的配置参数
351
350
  const finalOptions = { ...config, ...options };
352
351
 
353
- finalOptions.namesList = processNameList(finalOptions.namesList);
352
+ if (options.namesList) {
353
+ finalOptions.namesList = processNameList(options.namesList);
354
+ }
354
355
 
355
356
  if (finalDirPath) {
356
357
  // 执行重命名
@@ -0,0 +1,23 @@
1
+ <a name="getBasename"></a>
2
+
3
+ ## getBasename(filename) ⇒ <code>string</code>
4
+
5
+ getBasename() 方法用来获取文件名中不含扩展名的字符串
6
+
7
+ **Kind**: global function **Returns**:
8
+ <code>string</code> - - 返回文件名中去掉扩展名部分的字符串
9
+
10
+ | Param | Type | Description |
11
+ | -------- | ------------------- | -------------------- |
12
+ | filename | <code>string</code> | 文件名(路径)字符串 |
13
+
14
+ #### Usage
15
+
16
+ ```js
17
+ import getBasename from '@yaohaixiao/renames.js/lib/utils/get-basename.js';
18
+
19
+ const filename = '1-E01-1 (1).mp4';
20
+ const basename = getBasename(filename);
21
+
22
+ console.log(basename); // -> '1-E01-1 (1)'
23
+ ```
@@ -0,0 +1,23 @@
1
+ <a name="getExtension"></a>
2
+
3
+ ### getExtension(filename) ⇒ <code>string</code>
4
+
5
+ getExtension() 方法用来获取文件名中的扩展名部分字符串(含.)。
6
+
7
+ **Kind**: global function **Returns**:
8
+ <code>string</code> - - 返回文件名中扩展名部分的字符串,例如:'.jpg'
9
+
10
+ | Param | Type | Description |
11
+ | -------- | ------------------- | -------------------- |
12
+ | filename | <code>string</code> | 文件名(路径)字符串 |
13
+
14
+ #### Usage
15
+
16
+ ```js
17
+ import getExtension from '@yaohaixiao/renames.js/lib/utils/get-extension.js';
18
+
19
+ const filename = '1-E01-1 (1).mp4';
20
+ const extname = getExtension(filename);
21
+
22
+ console.log(extname); // -> '.mp4'
23
+ ```
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file