Powershell и пакетные решения не так уж отличаются.
Прошлое в Powershell/cmd - консоль
Batch:
For %A in ("JustinWorks" "A_Kreations_Hair_And_Beyond"
) Do (if not Exist ".\%~A" MD ".\%~A"
Move ".\*%~A*" ".\%~A\"
)
Powershell
"JustinWorks", "A_Kreations_Hair_And_Beyond"|
%{$Name=$_;if (!(Test-Path(".\$_"))) {MD ".\$_"};
GCI "*$Name*" |%{MV -path "$_" -dest ".\$Name\" -ea silentlycontinue}}
редактировать
Решение для пакетного файла, предполагающее, что префикс постоянно Make_Artist_
. BaseFldr
необходимо изменить соответствующим образом. Команда Move /Y
перезапишет файлы, уже имеющиеся в подпапке, для запроса на изменение Move /-Y
:: move2Sub.cmd :::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off & setlocal EnableExtensions EnableDelayedExpansion
Set BaseFldr="Q:\Test\2016-11\02"
PushD %BaseFldr% ||(Echo Can't cd to %BaseFldr% & Pause & Goto :eof)
Set "PreFix=Makeup_Artists_"
For /F "delims=" %%A in (
'Dir /B/ON/A-D "%PreFix%*" ^>Nul 2^>^&1'
) Do Call :CheckFile "%%~nxA"
Goto :Eof
:CheckFile "FullName"
If Not Exist %1 Goto :Eof
Set "File=%~n1"
:: remove Prefix
Set "Name=!File:%PreFix%=!"
:: check for trailing number, should already be processed
:Again
Echo:%Name:~-1%|Findstr "[0-9]" >Nul 2>&1 &&(Set "Name=!Name:~0,-1!"&Goto :Again)
If Not Exist "%Name%" MD "%Name%"
Move /Y "%PreFix%%Name%*%~x1" "%Name%" >NUL
Goto :Eof
НТН