У меня есть пакетный скрипт, который перебирает файлы в каталоге и будет переименовывать файл, если он соответствует одному из четырех шаблонов. Когда я запускаю это в своей тестовой среде, он работает отлично. Однако, когда я запускаю его с гордостью, он переименовывает только первый файл, с которым он сталкивается. Я запускаю их обоих с моего компьютера против каталогов на сопоставленных дисках.Пакетный сценарий для переименования файлов, не работающих (иногда)
Я думал, что проблема может иметь отношение к одному из имен файлов, которые я ищу, содержащим знак «+», но это не создает проблемы при запуске скрипта в тесте.
Путь к файлу для каталога, который я хочу найти, передается в качестве параметра. Это единственный параметр.
Любая помощь очень ценится.
Мой код ниже:
@ECHO OFF
SetLocal EnableDelayedExpansion
REM ******************************************************************************************
REM
REM Name: get_current_foldername.bat
REM Description: This script will rename generic loan review sample file names such as CRE.xls,
REM Family.xls, etc. to [docket]_[yyyymmdd]_[hhmmss]_[list type (cre, fam1-4, etc.)].xls.
REM Ex. 13346_20121220_125930_cre.xls.
REM This script is used by Globalscape as part of the completed loan review sample upload.
REM Parameters: There is one parameter passed.
REM The first parameter contains the path where the source file exists.
REM Author: Joe Mannetta
REM Date: 01/28/13
REM
REM ******************************************************************************************
REM ******************************************************************************************
REM
REM Set CurrPath variable to parameter value.
REM Set CurrDirName variable to the current directory name. This excludes higher level folders.
REM
REM ******************************************************************************************
SET CurrPath=%1%
FOR %%* in (%CurrPath%) DO (SET CurrDirName=%%~n*)
REM ECHO Current Path is: %CurrPath%
REM ECHO New DIR NAME is: %CurrDirName%
REM ******************************************************************************************
CD %CurrPath%
REM ECHO CurrPath is %CurrPath%
GOTO LOOP
REM *****************************************************************************************
REM LOOP Function
REM Loops through files in directory and go to Rename function if the file name matches CRE.xls, FAMILY.xls, FAMILY5+.xls, or HELOCS.xls.
REM *****************************************************************************************
:LOOP
REM Get name of 1st file in list. Note this also returns the full file path.
FOR /F "delims= tokens=1" %%f in ('dir /b *.xls') DO (
REM FOR /F "tokens=1" %%f IN ('dir /o-d /b %CurrPath%') DO (
SET File=%%f
ECHO File is: %%f
IF %%f==CRE.xls GOTO RENAME
IF %%f==FAMILY.xls GOTO RENAME
IF %%f==FAMILY5+.xls GOTO RENAME
IF %%f==HELOCS.xls GOTO RENAME
REM ECHO %%f
REM ECHO %ERRORLEVEL%
GOTO END
REM ECHO Did NOT Make it to GOTO
)
REM ******************************************************************************************
REM RENAME Function
REM Renames the file to [folder name]_[yyyymmdd]_[hhmmss]_[CRE|FAMILY|FAMILY5+|HELOCS].xls
REM Date is reformatted to yyyymmdd. Time is reformatted to hhmmss. Some credit due to Jimmy Selix at http://www.tech-recipes.com/rx/956/windows-batch-file-bat-to-get-current-date-in-mmddyyyy-format/ for date and time formatting.
REM ******************************************************************************************
:RENAME
REM End loop so that File variable is set to the newest file.
REM Drop file path to isolate the file name.
SET CurrFName=!File:%CurrPath%=!
REM ECHO CurrFName is %CurrFName%
REM Set date to yyyymmdd format.
SET dt=!date:~10,4!!date:~4,2!!date:~7,2!
REM Set time to hhmmss format. Include leading zeros for single digit times.
SET mytime=%TIME: =0%
SET hhmmss=!mytime:~0,2!!mytime:~3,2!!mytime:~6,2!
SET NewFName=!CurrDirName!_!dt!_!hhmmss!_!CurrFName!
REM echo !CurrPath!\!CurrFName! !CurrPath!\!NewFName!
REM Set new file name and rename file.
COPY "!CurrPath!\!CurrFName!" "!CurrPath!\!NewFName!"
COPY "!CurrPath!\!NewFName!" "!CurrPath!\..\..\archive"
DEL /Q !CurrPath!\!CurrFName!
REM ECHO %ERRORLEVEL%
GOTO LOOP
REM *******************************************************************************************
:END
Это много кода, чтобы вырыть через. Можете ли вы сузить его до той части, которая вызывает проблему? Есть больше шансов, что вы найдете кого-то, желающего помочь, если нам нужно будет прочитать только десяток строк кода. Правило большого пальца: если для вашего кодового блока необходима полоса прокрутки, это, вероятно, слишком много кода. –