找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25282|回复: 7

[文件操作] [已解决]批处理怎么在文件/文件夹名中按要求加入某个字符?

[复制链接]
发表于 2020-1-29 21:00:05 | 显示全部楼层 |阅读模式
目录下有文件和文件夹,要求是在文件/文件夹名称的字母和数字中间加上-这个符号,
但是条件是相邻的字母和数字都是两个或者以上字符才加上-这个符号,单一字母和数字之间不加符号。

例如把 ABCD1234C 这个文件/文件夹名,更改为 ABCD-1234C
     
请问大佬怎么写?
发表于 2020-1-29 22:03:49 | 显示全部楼层
  1. <#*,:&cls
  2. @echo off
  3. pushd "%~dp0"
  4. powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath "%~0" -ReadCount 0 | Out-String ))) "
  5. popd
  6. pause
  7. exit /b
  8. #>
  9. # 文件名 2个及以上字母与2个及以上数字之间添加-
  10. Get-ChildItem -Path . -Filter * | ForEach-Object {
  11.   $newName = $_.FullName -replace '(?<=[a-z]{2,})(?=[0-9]{2,})|(?<=[0-9]{2,})(?=[a-z]{2,})', '-'
  12.   if ($newName -ne $_.FullName) {
  13.     Rename-Item -LiteralPath $_.FullName -NewName $newName -Force -Verbose
  14.   }
  15. }
复制代码
 楼主| 发表于 2020-1-29 23:34:16 | 显示全部楼层
回复 2# flashercs

老哥这个运行后报错显示这个

Rename-Item : 找不到与参数名称“LiteralPath”匹配的参数。
所在位置 行:13 字符: 29
+     Rename-Item -LiteralPath <<<<  $_.FullName -NewName $newName -Force -Verb
ose
    + CategoryInfo          : InvalidArgument: ( [Rename-Item], ParameterBin
   dingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
   ands.RenameItemCommand

Rename-Item : 找不到与参数名称“LiteralPath”匹配的参数。
所在位置 行:13 字符: 29
+     Rename-Item -LiteralPath <<<<  $_.FullName -NewName $newName -Force -Verb
ose
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], ParameterBin
   dingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
   ands.RenameItemCommand

Rename-Item : 找不到与参数名称“LiteralPath”匹配的参数。
所在位置 行:13 字符: 29
+     Rename-Item -LiteralPath <<<<  $_.FullName -NewName $newName -Force -Verb
ose
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], ParameterBin
   dingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
   ands.RenameItemCommand

Rename-Item : 找不到与参数名称“LiteralPath”匹配的参数。
所在位置 行:13 字符: 29
+     Rename-Item -LiteralPath <<<<  $_.FullName -NewName $newName -Force -Verb
ose
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], ParameterBin
   dingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
   ands.RenameItemCommand

Rename-Item : 找不到与参数名称“LiteralPath”匹配的参数。
所在位置 行:13 字符: 29
+     Rename-Item -LiteralPath <<<<  $_.FullName -NewName $newName -Force -Verb
ose
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], ParameterBin
   dingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
   ands.RenameItemCommand

Rename-Item : 找不到与参数名称“LiteralPath”匹配的参数。
所在位置 行:13 字符: 29
+     Rename-Item -LiteralPath <<<<  $_.FullName -NewName $newName -Force -Verb
ose
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], ParameterBin
   dingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
   ands.RenameItemCommand

请按任意键继续. . .
发表于 2020-1-30 00:39:14 | 显示全部楼层
本帖最后由 flashercs 于 2020-1-30 00:40 编辑

回复 3# ChenCheChe
  1. <#*,:&cls
  2. @echo off
  3. pushd "%~dp0"
  4. powershell  -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath "%~0" -ReadCount 0 | Out-String ))) "
  5. popd
  6. pause
  7. exit /b
  8. #>
  9. # 文件名 2个及以上字母与2个及以上数字之间添加-
  10. Get-ChildItem -Path . -Filter * | ForEach-Object {
  11.   $newName = $_.FullName -replace '(?<=[a-z]{2,})(?=[0-9]{2,})|(?<=[0-9]{2,})(?=[a-z]{2,})', '-'
  12.   if ($newName -ne $_.FullName) {
  13.     Rename-Item -Path ($_.pspath -replace '[\[\]]','`$&') -NewName $newName -Force -Verbose
  14.     # $_.MoveTo($newName)
  15.   }
  16. }
复制代码
发表于 2020-1-30 01:35:18 | 显示全部楼层
本帖最后由 Gin_Q 于 2020-1-30 01:41 编辑

这是c写的!只支持数字和字母
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 2048
  5. FILE *fp;
  6. FILE *fp1;
  7. int main(void)
  8. {
  9.         if ((fp=fopen("C:\\Users\\Cool_Breeze\\Desktop\\gin\\strt.txt","r"))==NULL)        //待处理文件的位置
  10.         {
  11.                 printf("读取文件失败!");
  12.                 return 0;
  13.         }
  14.         if ((fp1=fopen("C:\\Users\\Cool_Breeze\\Desktop\\gin\\new.txt","w"))==NULL) //保存文件的位置
  15.         {
  16.                 printf("打开文件失败!");
  17.                 return 0;
  18.         }
  19.         char str[MAX]="0";
  20.         int fun1(char*);
  21.         printf("正在处理文件...\n");
  22.         while (1)
  23.         {
  24.                 if (fgets(str,MAX,fp)==NULL) break;
  25.                 fun1(str);
  26.         }
  27.         fclose(fp);
  28.         fclose(fp1);
  29.         printf("完成");
  30.         return 0;
  31. }
  32. int fun1(char *arr)
  33. {
  34.         char *p=arr,temp[MAX]="";
  35.         int n=0,i=0,j=0,on=0;
  36.         while (1)
  37.         {
  38.                 if (*(p+n)>=48 && *(p+n)<=57)
  39.                 {
  40.                         i++;
  41.                         on=0;
  42.                                 if (i>=2 && on!=0)
  43.                         {
  44.                                 strcat(temp,"-");
  45.                                 i=0;
  46.                         }
  47.                         else if (j>=2 && on!=1)
  48.                         {
  49.                                 strcat(temp,"-");
  50.                                 j=0;
  51.                         }
  52.                         strncat(temp,(p+n),1);
  53.                 }
  54.                 else if (*(p+n)>=65 && *(p+n)<=90)
  55.                 {
  56.                         j++;
  57.                         on=1;
  58.                         if (i>=2 && on!=0)
  59.                         {
  60.                                 strcat(temp,"-");
  61.                                 i=0;
  62.                         }
  63.                         else if (j>=2 && on!=1)
  64.                         {
  65.                                 strcat(temp,"-");
  66.                                 j=0;
  67.                         }
  68.                         strncat(temp,(p+n),1);
  69.                 }
  70.                 else if (*(p+n)>=97 && *(p+n)<=122)
  71.                 {
  72.                         j++;
  73.                         on=1;
  74.                         if (i>=2 && on!=0)
  75.                         {
  76.                                 strcat(temp,"-");
  77.                                 i=0;
  78.                         }
  79.                         else if (j>=2 && on!=1)
  80.                         {
  81.                                 strcat(temp,"-");
  82.                                 j=0;
  83.                         }
  84.                         strncat(temp,(p+n),1);
  85.                 }
  86.                 if (*(p+n)=='\0')
  87.                 {
  88.                         if (i>=2) strcat(temp,"-");                        //满足条件结尾是否加【-】,默认加。
  89.                         else if (j>=2) strcat(temp,"-");        //满足条件结尾是否加【-】,默认加。
  90.                         fprintf(fp1,"%s\n",temp);
  91.                         return 0;
  92.                  }
  93.                 n++;
  94.         }
  95. }
复制代码
  1. 源文件:abcd123c
  2. an124Ab1
  3. wrf1
  4. waf234
  5. af13
  6. fa1
  7. ----------------------分割线---------------------
  8. 效果如下:
  9. abcd-123-c
  10. an-124-Ab-1
  11. wrf-1
  12. waf-234
  13. af-13
  14. fa-1
复制代码
发表于 2020-1-30 01:37:52 | 显示全部楼层
这个需要你先把文件名储存在文件中,然后通过批处理重命名
 楼主| 发表于 2020-1-30 19:39:19 | 显示全部楼层
回复 5# Gin_Q


    谢谢,我试试。
 楼主| 发表于 2020-1-30 19:39:35 | 显示全部楼层
回复 4# flashercs


    谢谢诶,我试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 14:43 , Processed in 0.018192 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表