Переименование файлов в подпапке и перезапись через пакет - PullRequest
0 голосов
/ 19 октября 2018

Вот текущий код:

@ECHO OFF

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

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

Я также пробовал с перемещением / y

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

Оба не будут работать (синтаксическая ошибка или каталог не найден).В основном пытается переименовать все в подпапке с префиксом («Test_») и перезаписать любые дубликаты.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Дайте это попробовать.Я прокомментировал код, чтобы лучше объяснить, как он работает.

@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
0 голосов
/ 19 октября 2018

Уэлп, кажется, у Сквошмана есть лучший ответ, чем у меня.100

Просто чтобы добавить ответ.(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
...