[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

目录下有文件和文件夹,要求是在文件/文件夹名称的字母和数字中间加上-这个符号,
但是条件是相邻的字母和数字都是两个或者以上字符才加上-这个符号,单一字母和数字之间不加符号。

例如把 ABCD1234C 这个文件/文件夹名,更改为 ABCD-1234C
     
请问大佬怎么写?

  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. }
复制代码
微信:flashercs
QQ:49908356

TOP

回复 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

请按任意键继续. . .

TOP

本帖最后由 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. }
复制代码
微信:flashercs
QQ:49908356

TOP

本帖最后由 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
复制代码

TOP

这个需要你先把文件名储存在文件中,然后通过批处理重命名

TOP

回复 5# Gin_Q


    谢谢,我试试。

TOP

回复 4# flashercs


    谢谢诶,我试试。

TOP

返回列表