我有 3 个文件夹,其结构如下……
- /location1
- /subdirLocation1
- foo-bar1.txt、foo-bar2.txt、foo-bar3.txt
- /location2
该subdirLocation1
文件夹是 的子目录location1
。该location1
文件夹还包含文件foo-bar1.txt
、foo-bar2.txt
、foo-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.txt
、foo-bar2.txt
、foo-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\location1\"
for /R %%f in (*-*.txt) do call :copyFile %%f
goto: eof
:copyFile
xcopy %1 "C:\Users\abcde\Desktop\Practice_Folder\batch_rename\location2"
set file=%~nx1
rename file %str:-=_%
答案1
我想将所有 .txt 文件从 location1 及其子目录移动到 location2,并通过将所有“-”替换为“_”来重命名这些 .txt 文件。
由于您回复了大量您为此投入的批处理工作,因此我想与您分享一个脚本,该脚本应该有助于您解释您需要如何工作。
在运行任何关键或生产相关的操作之前,请务必使用测试数据进行测试并确认所有工作均按预期进行。
脚本示例
您不需要使用注释逻辑,但如果您需要它,它就在那里
@ECHO ON
SET Loc1Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\location1
SET Loc2Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\location2
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