@ECHO OFF
SetLocal EnableDelayedExpansion
:: target directory name in variable for convenience.
SET "targetdir=U:\sourcedir"
:: switch to target directory
pushD "%targetdir%"
:: Start count at 100 so that it is 3 digits long
set cnt=100
dir
for %%A in (*) do set /a cnt+=1
set /A fileNumber = %cnt%
set /A newFileNumber = %cnt%+1
:: echoing last 2 characters (will be digits) of variables
echo %fileNumber:~-2% (%filenumber%)
echo %newFileNumber:~-2% (%newfilenumber%)
:: Assign %%F to values 100+actual descending by 1 to 101
for /l %%F in (%fileNumber%,-1,100) do (
rem note need REM remarks within the loop
REM use !varname! for current value of variable VARNAME
if !newFileNumber:~-2!==90 (
ECHO ren "*_!fileNumber:~-2!.don" "*_!newFileNumber:~-2!.csv"
)
if !newFileNumber:~-2!==60 (
ECHO ren "*_!fileNumber:~-2!.don" "*_!newFileNumber:~-2!.csv"
)
if !newFileNumber:~-2!==30 (
ECHO ren "*_!fileNumber:~-2!.don" "*_!newFileNumber:~-2!.csv"
)
rem Since you've just renamed (eg) _59.don to _60.csv, _59.don is missing
IF EXIST "*_!fileNumber:~-2!.don" ECHO ren "*_!fileNumber:~-2!.don" "*_!newFileNumber:~-2!.don"
set /A fileNumber=fileNumber-1
set /A newFileNumber=newFileNumber-1
)
:: return to original directory
popd
GOTO :EOF
Необходимые команды REN просто ECHO
отредактированы для целей тестирования. После того как вы убедились, что команды верны , измените ECHO REN
на REN
, чтобы фактически переименовать файлы.
К сожалению, вы показали нам, КАК вы НЕ смогли сделать какую-то операцию, которая немного расплывчата. Таким образом, нам необходимо выяснить, что вы намереваетесь сделать, что является дополнительной работой и склонно к преследованию диких гусей.
Вы не говорите, что делать с файлами * _90, поэтому мы ничего не можем поделать.
Похоже, вы хотите изменить * _59.don на * _60.csv, но ваше переименование хочет изменить * _60.DON при следующем вызове, поэтому, если имя не было изменено с _ * 60.CSV обратно на * _60 .ДОН, это не сработает.
Обратите внимание, что основой этой подпрограммы является работа с последними двумя символами переменных. Это должно соответствовать ведущему 0
, указанному в схеме нумерации.
Это стандартная практика, предполагающая, что вы будете выполнять любую процедуру с проверочным каталогом для проверки.
Обратите внимание, что каждый REN
имеет значение ECHO
, поэтому он НЕ ИСПОЛНЯЕТСЯ, а просто сообщается. Измените ECHO REN
на REN
, чтобы фактически выполнить команду.
Обратите внимание, что партия в значительной степени не зависит от регистра. Это означает, что вам не нужно носить свой ключ SHIFT, если вы не хотите.