2016-04-14 8 views
2

Я хотел бы иметь возможность «редактировать» имя папки файла с помощью пакетного скрипта. Например, если папка 20011993, я хотел бы иметь возможность добавлять или удалять символы в любой позиции, задавая переменную. Несколько примеров вывода будет:Манипулировать имена папок с партией

20_01_1993, 2-1-1993, 20-01-1993, 1993.

Я понимаю, что я теоретически должен быть в состоянии сделать это, используя delims и жетоны но мне нужна небольшая помощь.


1.

Этот код удалит 6 символов файла, однако я хочу использовать его в папку ... Я могу понять это позже

@ECHO ON 
setlocal enabledelayedexpansion 
for /f "delims=" %%a in ('dir *.txt /b /a-d ') do (
    set "name=%%~na" 
    copy "%%a" "C:\FolderB\!name:~0,-6!%%~xa" 
) 
pause 

Я знаю, Я могу переименовать всю папку как RENAME "C:\users\my profile\my word documents" "my documents", но я хочу просто отредактировать уже именованную папку.


2.

Этот код добавляет 0 перед именем папки. Это все, что он может сделать до сих пор, но я хотел бы, чтобы определить положение добавляя 0

@ECHO ON 
for /D %%f in (*) do rename "%%f" "0%%f" 
pause 

, так что я считаю, что делает 0 в вар, а затем с помощью delims и маркеры для определения положения в файле именем.Я был бы благодарен за любую помощь благодаря.

Я использую Windows 10 64bit.

Прошу прощения, если это немного запутанно, я старался быть как можно более кратким.

ответ

1

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

@echo off 
set "folderName=20011993" 
SET newFolderName=%folderName:~0,2%_%folderName:~2,2%_%folderName:~4% 
echo ren %folderName% %newFolderName% 
pause 

Это предполагает, что вы имеете FOLDERNAME сохраненное в переменной уже. Для получения дополнительной информации о переменных подстроках вы должны посмотреть на this

Обратите внимание, что это повторяет команду для переименования, чтобы фактически переименовать папку, вы должны удалить echo из этой строки.

1

Предполагая, что у вас есть структура папки что-то вроде этого:

├───20011993 
│ ├───someFile.txt 
│ └───anotherFile.txt 
├───21011993 
│ └───andAnotherFile.txt 
└───22011993 
    └───yetAnotherFile.txt 

Вы можете запустить из родительского каталога, содержащего эти папки.

setlocal enabledelayedexpansion 
for /f "delims=" %%a in ('dir ????1993 /b/ad ') do (
    set "name=%%~na" 
    echo ren "!name!" "!name:~0,2!-!name:~2,2!-!name:~4,4!" 
) 

Если у вас есть папки, которые охватывают несколько лет, вы можете перебирать каждый год как число, используя for /l петли.

setlocal enabledelayedexpansion 

set beginYear=1993 
set endYear=2016 
for /l %%x in (%beginYear%,1,%endYear%) do call :renameLoop %%x 

:renameLoop 
for /f "delims=" %%a in ('dir ????%1 /b/ad ') do (
    set "name=%%~na" 
    echo ren "!name!" "!name:~0,2!_!name:~2,2!_!name:~4,4!" 
) 
Смежные вопросы