【问题标题】:Rename files within subfolder and overwrite via batch重命名子文件夹中的文件并通过批处理覆盖
【发布时间】:2019-03-24 11:46:45
【问题描述】:

这是当前代码:

@ECHO OFF

ECHO.
REM rename 
REN "H:\DIRECTORY with Space\folder1\*.*" "H:\DIRECTORY with Space\Folder1\TEST_*.*"

ECHO.
DIR nofile || (PAUSE && EXIT /B 1)

我也试过用 move / y

move /y "H:\DIRECTORY with Space\folder1\*.*" "H:\DIRECTORY with Space\folder1\TEST_*.*"

两者都不起作用(语法错误或找不到目录)。基本上试图用前缀(“Test_”)重命名子文件夹中的所有内容并覆盖任何重复项。

【问题讨论】:

  • 当您阅读REN 命令的帮助文件时,您并不理解这一点:请注意,您不能为目标文件指定新的驱动器或路径。
  • 文件名和目的地都相同 "H:\DIRECTORY with Space\Folder1" 。尝试重命名“folder1”中的所有内容
  • 没关系。帮助文件中的语法清楚地表明您不能为目标指定路径。

标签: batch-file overwrite batch-rename


【解决方案1】:

试试这个。我已对代码进行了注释,以帮助更好地解释其工作原理。

@ECHO OFF

:: Changes to a directory and saves previous directory to go back to
PUSHD "H:\DIRECTORY with Space\folder1\"

:: Critical that you USE this instead of a normal FOR command.
:: A normal FOR command may attempt to rename a file twice.
FOR /F "delims=" %%G IN ('DIR /a-d /b *.*') do rename "%%~G" "TEST_%%~G"

:: Goes back to the previous directory.
POPD

【讨论】:

  • 工作就像一个魅力。有点扭曲。如果我现在想删除我们的前缀并返回原始文件名怎么办?即现在从文件名中删除“TEST_”..(如果我应该为此创建一个新问题?)
  • @Wsi,我会为此提出另一个问题。请至少在发布问题之前尝试一下,并附上您尝试使用的代码。
【解决方案2】:

Welp,Squashman 的答案似乎比我好。 ?

只是为他的答案添加一些内容。 (Sorry I can't comment.)

FOR /F "delims=" %%G IN ('DIR /a-d /b *.*') do ren "%%~G" "TEST_%%~G"之后

添加它可以帮助重命名目录中的 FOLDER(S)。 FOR /F "delims=" %%G IN ('DIR /ad /b *.*') do ren "%%~G" "TEST_%%~G"


但我建议使用:

for /f "delims=" %%a in ('DIR /a-d /s /b ^| findstr /v /c:"%~nx0") do (ren "%%a" "TEST_%%~nxa" >nul 2>nul )
for /f "delims=" %%a in ('DIR /ad /s /b ^| sort /r') do (ren "%%a" "TEST_%%~nxa" >nul 2>nul )

还有一些扩展功能:

@echo off
rem not necessary
title to whom it may rename
color 0a
mode 120,25
goto start
rem is necessary

:start
cls
echo Please enter the path which you want to rename all contents in it with a prefix. No need for the quotes.
echo %%cd%% for the current working directory
set /p p=The path: 
call set p=%p:"=%
echo.
if not exist "%p:"=%" (echo The folder doesn't exist in the typed in path.
echo Current working directory: "%cd%"
echo Please try another path. Press any key to continue.
pause >nul
goto start)
rem adding Squashman's answers here
pushd "%p%"
echo Renaming file(s) in the required folder.
for /f "delims=" %%a in ('DIR /a-d /s /b ^| findstr /v /c:"%~nx0") do (ren "%%a" "TEST_%%~nxa" >nul 2>nul )
echo Renaming (sub)folder(s) in the required folder.
for /f "delims=" %%a in ('DIR /ad /s /b ^| sort /r') do (ren "%%a" "TEST_%%~nxa" >nul 2>nul )
echo.
if "%cd%\" == "%~dp0" (echo Do you want to rename this batch too? It will auto exit after renaming.
choice /c yn /n /m "[Y/N] ")
if "%errorlevel%" == "1" (ren "%~nx0" "TEST_%~nx0" >nul 2>nul )
echo Renaming finished. Please press any key to leave the batch.
pause >nul
exit

【讨论】:

    猜你喜欢
    • 2022-08-10
    • 2016-09-11
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多