Windows-сценарий FOR для переименования всех файлов в каталоге - PullRequest
1 голос
/ 10 октября 2008

Я пытаюсь переименовать все файлы, присутствующие в каталоге Windows, используя команду FOR в командной строке следующим образом:

for %1 in (*.*) do ren %1 test%1 

например. Это переименует файл enc1.ctl в testenc1.ctl enc2.ctl в testenc2.ctl

Это не то, что я хочу. Что я хочу это enc1.ctl переименован в test1.ctl enc2.ctl переименован в test2.ctl

Как мне это сделать?


@ Akelunuk: Спасибо, что вроде работает, но у меня есть имена файлов как

h263_enc_random_pixels_1.ctl, h263_enc_random_pixels_2.ctl которую я хочу переименовать в

test1.ctl и test2.ctl соответственно

Тогда как?

Ответы [ 4 ]

2 голосов
/ 10 октября 2008

Я понял!

for %1 in (.) do ren %1 t%1

и затем:

ren tenc*.* test*.*
1 голос
/ 10 октября 2008

Я не уверен, что это возможно в пакетном режиме, но опять же, я никогда не освоил этот примитивный язык ...: -P

Если CMD не является обязательным, но вы не можете использовать хороший переименователь файлов, вы можете сделать это с помощью WSH:

var path= "E:/tmp";

var fso = WScript.CreateObject("Scripting.FileSystemObject");
var folder = fso.GetFolder(path);
var files = new Enumerator(folder.files);
for (; !files.atEnd(); files.moveNext())
{
  var file = files.item();
  var fileName = file.Name;
  var p = /^enc(\d+)\.ctl$/.exec(fileName);
  if (p != null)
  {
    var newFileName = "test" + p[1] + ".ctl";
    // Optional feedback
    WScript.echo(fileName + " -----> " + newFileName);
    file.Move(newFileName);
  }
}

Конечно, поместите это в файл .js
Я тестировал file.Copy(file.ParentFolder + "/SO/" + newFileName);, чтобы не потерять файлы ...

НТН.

1 голос
/ 10 октября 2008

Если вы знаете количество файлов (скажем, 10), вы можете использовать

for /L %1 in (1,1,10) do ren enc%1.ctl test%1.ctl
0 голосов
/ 29 сентября 2016

Переименовывает все файлы в каталоге для типов файлов фильтра с PREFIX и сегодняшней датой и временем

@echo ON
cls
for %%a in (*.pdf) do (set myfiledate=%%~ta echo !myfiledate!)

echo Date format = %myfiledate%
echo dd = %myfiledate:~0,2%
echo mm = %myfiledate:~3,2%
echo yyyy = %myfiledate:~6,4%
echo.
echo Time format = %myfiledate%
echo hh = %myfiledate:~11,2%
echo mm = %myfiledate:~14,2%
echo AM = %myfiledate:~17,2%
echo.
echo Timestamp = %myfiledate:~0,2%_%myfiledate:~3,2%_%myfiledate:~6,4%-%myfiledate:~11,2%_%myfiledate:~14,2%_%myfiledate:~17,2%
ECHO "TEST..." > "test-%myfiledate:~0,2%_%myfiledate:~3,2%_%myfiledate:~6,4%-TIME-%myfiledate:~11,2%_%myfiledate:~14,2%_%myfiledate:~17,2%.txt"
PAUSE

Это успешно отображает дату и время, измененные как постфикс, но не анализирует информацию в переименовании. Я не могу понять, почему, но это очень близко. Может быть, кто-то не может настроить в соответствии с вашими целями.

@echo ON
setlocal
cls
for %%a in (*.pdf) do (set myfiledate=%%~ta echo !myfiledate!)

:DATETIME
echo Date format = %myfiledate%
echo dd = %myfiledate:~0,2%
echo mm = %myfiledate:~3,2%
echo yyyy = %myfiledate:~6,4%

echo Time format = %myfiledate%
echo hh = %myfiledate:~11,2%
echo mm = %myfiledate:~14,2%
echo AM = %myfiledate:~17,2%
 = %myfiledate:~17,2%
echo.

echo Timestamp = %myfiledate:~0,2%_%myfiledate:~3,2%_%myfiledate:~6,4%-%myfiledate:~11,2%_%myfiledate:~14,2%_%myfiledate:~17,2%
ECHO "TEST..." > "test-%myfiledate:~0,2%_%myfiledate:~3,2%_%myfiledate:~6,4%-TIME-%myfiledate:~11,2%_%myfiledate:~14,2%_%myfiledate:~17,2%.txt"

for /f "delims=" %%a in ('dir *.pdf /t:a /a:-d /b /s') do call :RENAME "%%a"

:RENAME
REM for /f "tokens=1-6 delims=/ " %%a in ('dir %%a /t:w^|find "/"') do (
ren %%a "3DC-test-OFF-ELE-%myfiledate:~0,2%_%myfiledate:~3,2%_%myfiledate:~6,4%-TIME-%myfiledate:~11,2%_%myfiledate:~14,2%_%myfiledate:~17,2%~x1")
PAUSE
GOTO :EOF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...