【问题标题】:batch file to rename files also tries to rename directories批处理文件重命名文件也尝试重命名目录
【发布时间】:2021-01-27 08:43:51
【问题描述】:

以下批处理文件用于从 txt 文件中获取目录和文件名,并根据给定的名称重命名目录中的文件。

SETLOCAL EnableDelayedExpansion

(for /f "tokens=1,2 delims=;" %%A in ('"TYPE C:\RENAME-ALL.txt"') do (
echo %%A | find /i "\" 
 if !errorlevel! equ 1 (
RENAME "D:\!mypath!%%A" "%%B" 
 ) ELSE (
echo "found pattern"
echo %%A
set  mypath=%%A
  echo mypath is !mypath!
 )
)
) >> C:\RENAME-ALL-4.txt 2>&1
endlocal

========== RENAME-ALL.TXT ================

mydirectory\photos\2019\  <= this is the directory
IMG_20190729_064619.jpg;IMG_20190825_064619.jpg   <=former name is replaced by the latter name

在这种情况下,批处理文件将 mydirectory\photos\2019 中的文件 IMG_20190729_064619.jpg 重命名为 IMG_20190825_064619.jpg。

但是,批处理文件还尝试将 mydirectory\photos\2019 重命名为“”(这不应该发生。)可以抑制吗?怎么样?

【问题讨论】:

  • 另一个选项是测试%%A 是否是一个目录。有几种方法可以做到这一点。 StackOverFlow 上已经回答了很多关于此的问题。所以搜索吧。
  • @Squashman 我相信echo %%A | find /i "\" 正在测试目录。如果未找到“\”,则该行不是目录。

标签: batch-file batch-rename


【解决方案1】:
SETLOCAL EnableDelayedExpansion

(for /f "tokens=1,2 delims=;" %%A in ('"TYPE C:\RENAME-ALL.txt"') do if "%%B"=="" (
  echo "found pattern"
  echo %%A
  set  "mypath=%%A"
  echo mypath is !mypath!
 ) ELSE (
  RENAME "D:\!mypath!%%A" "%%B" 
 )
) >> C:\RENAME-ALL-4.txt 2>&1
endlocal

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 2012-12-10
    • 2019-05-25
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多