1

Я пишу сценарий для переименования файлов на основе даты.

Файлы генерируются каждый день с сервера, выводящего их так:

fil150807102600000001.txt
fil150807102600000002.txt
fil150807102600000003.txt

Моя цель с моим сценарием - автоматически переименовать их в:

FILE-SRV1.DAAMMJJ_00000001
FILE-SRV1.DAAMMJJ_00000002
FILE-SRV1.DAAMMJJ_00000003

Ручные шаги, которые я прилагаю для достижения этой цели:

 1- format date to AAMMJJ (i am on a french computer, windows 7)
      set date=%date:~8,2%%date:~3,2%%date:~0,2%
         echo %date%
         150807
 2- Now rename my file as expected
      set fname=fil150807102600000001.txt
      ren "%fname%" "FILE-SRV1.D%date%_%fname:~13,8%"   [strip off the first 
      13 char and leave the 8 last]

Мой файл правильно переименован.

Теперь я хочу написать это:

loop into the directory, 
find all file names starting by fil*
and rename them as needed

Вот мой сценарий, предполагающий, что этот сценарий запускается из папки, в которой находятся мои исходные файлы:

set date=%date:~8,2%%date:~3,2%%date:~0,2%
for /f %%f in ('dir fil* /b') do ren %%f "FILE-SRV1.D%%date%%_%%f:~13,8%"

Результат:

Тест на существование файла

C:\test\bat>dir fil* /b
fil150807102600000001.txt
fil150807102600000002.txt
fil150807102600000003.txt

Запуск скриптов

C:\test\bat>script2.bat
C:\test\bat>set date=150807
C:\test\bat>for /F %f in ('dir fil* /b') do ren %f "FILE-SRV1.D%date%_%f:~13,8"
C:\test\bat>ren fil150807102600000001.txt "FILE-RV1.D%date%_fil150807102600000001.txt:~13,8"
Le nom de fichier existe déjà, ou le fichier est introuvable.

C:\test\bat>ren fil150807102600000002.txt "FILE-    SRV1.D%date%_fil150807102600000002.txt:~13,8"
Le nom de fichier existe déjà, ou le fichier
est introuvable.

C:\test\bat>ren fil150807102600000003.txt "FILE-SRV1.D%date%_fil150807102600000003.txt:~13,8"
Le nom de fichier existe déjà, ou le fichier
est introuvable.

Пожалуйста, ваша помощь будет высоко ценится

1 ответ1

0

Вы используете много знаков % , также, вероятно, не стоит назначать переменную DATE , и вы не можете напрямую выполнять строковые операции над переменными FOR (они похожи на %%f и вам нужно кое-что с % в конец):

setlocal enabledelayedexpansion
set dat=%date:~8,2%%date:~3,2%%date:~0,2% 
for %%f in (fil*) do (
  SET "FILE=%%f"
  ren "%%f" "FILE-SRV1.D%dat%_!FILE:~13,8!"
)

(setlocal enabledelayedexpansion требуется для использования ! обозначение, поэтому переменная FILE обновляется каждую итерацию цикла.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .