批处理脚本以递归方式移动 .txt 文件并重命名它们以替换特定字符

批处理脚本以递归方式移动 .txt 文件并重命名它们以替换特定字符

我有 3 个文件夹,其结构如下……

  • /location1
    • /subdirLocation1
      • foo-bar1.txt、foo-bar2.txt、foo-bar3.txt
  • /location2

subdirLocation1文件夹是 的子目录location1。该location1文件夹还包含文件foo-bar1.txtfoo-bar2.txtfoo-bar3.txt。但是,该location2文件夹为空。

文件夹结构回顾

  • location1 > subdirLocation1,foo-bar1.txt,foo-bar2.txt,foo-bar3.txt
  • subdirLocation1 > foo-bar-subdir.txt
  • 位置2 > (空)

我想将所有 .txt 文件从location1及其子目录移动到location2,并通过将每个“-”替换为“_”来重命名这些 .txt 文件,以便文件名中的每个连字符都变成下划线字符。

我需要使用 Windows 批处理脚本来完成此任务吗?


这是我在添加其他逻辑之前最初想到的为了循环位于我的答案的底部附近。

但是,这只会从目录中移动 .txt 文件location1,而不会从其子目录中移动。此外,重命名仅适用于foo-bar1.txtfoo-bar2.txtfoo-bar3.txt。它不适用于foo-bar-subdir.txt

MOVE "C:\Users\abcde\Desktop\Practice_Folder\batch rename\location1\*.txt" "C:\Users\abcde\Desktop\Practice_Folder\batch rename\location2"  
RENAME "C:\Users\abcde\Desktop\Practice_Folder\batch rename\location2\*-*" ???_????.txt 

下面是我所用的方法,效果比上面的要好一点,但文件名中的连字符没有被下划线替换

CD "C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n1\" 
for /R %%f in (*-*.txt) do call :copyFile %%f 
goto: eof 

:copyFile 
xcopy %1 "C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n2" 
set file=%~nx1 
rename file %str:-=_%

答案1

我想将所有 .txt 文件从 location1 及其子目录移动到 location2,并通过将所有“-”替换为“_”来重命名这些 .txt 文件。

由于您回复了大量您为此投入的批处理工作,因此我想与您分享一个脚本,该脚本应该有助于您解释您需要如何工作。

在运行任何关键或生产相关的操作之前,请务必使用测试数据进行测试并确认所有工作均按预期进行。

脚本示例

您不需要使用注释逻辑,但如果您需要它,它就在那里

@ECHO ON

SET Loc1Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n1
SET Loc2Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n2

CD /D "%Loc1Dir%" 
FOR /R %%F IN ("*-*.txt") DO CALL :copyFile %%~F %%~NXF
GOTO: EOF 

:copyFile
SET copyfname=%~1
SET fname=%~2 
SET fname=%fname:-=_% 
ECHO F | XCOPY /Y /F "%copyfname%" "%Loc2Dir%\%fname%"
:::XCOPY /Y /F "%copyfname%" "%Loc2Dir%\"
:::REN "%copyfname%" "%fname%"
GOTO :EOF

屏幕截图说明

在此处输入图片描述


更多资源

相关内容