Я пытаюсь создать командный файл, который будет:
Запросить каталог (в котором содержится много файлов)
Запросить второй каталог (это место, где пакет будет создавать каталоги для каждого файла, а затем скопировать каждый файл в свой собственный каталог)
Количество символов, удаляемых справасторона созданного каталога.(Например, два документа «NewDoc_Ver1» и «NewDoc_Ver2» будут скопированы в один и тот же каталог «NewDoc»).
Ниже приведены некоторые похожие вопросы, которые могут помочь.
https://superuser.com/questions/1138283/batch-script-for-moving-files-to-the-same-name-folder
Как узнать длину строки в пакетном файле?
пакетных файлов, вызывающих% ~ 1 и получающих текущий переменнуюзначение / строка
https://ss64.com/nt/syntax-substring.html
В настоящее время я застрял при попытке заставить 'String Left' работать с динамическим числом.(Я еще не посмотрел, как вставить пользовательский ввод). Любая помощь была бы отличной.
@echo off
setlocal enabledelayedexpansion
set folderpath=C:\Users\james.shaw\Desktop\R2
for %%f in (%folderpath%\*.*) do (
set "foldername=%%~nf"
set f1=!foldername!
call :strlen folderlength foldername
REM set JS1=%%foldername:~0,!folderlength!%%
set JS1=!f1!:~0,!folderlength!
md !JS1!
REM md "!foldername:~0,!folderlength!!" >nul 2>&1
move "%%f" "!foldername:~0,!folderlength!!"
pause
)
goto :eof
:strlen <resultVar> <stringVar>
(
setlocal EnableDelayedExpansion
set "s=!%~2!#"
set "len=0"
for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!s:~%%P,1!" NEQ "" (
set /a "len+=%%P"
set "s=!s:~%%P!"
)
)
)
(
endlocal
set "%~1=%len%"
exit /b
)
Обновление:
ниже я нашел пакет, похожий нато, что я ищу (я потерял веб-URL), однако он работает только в том же каталоге, что и пакетный файл, и не позволяет усекать созданные каталоги: мне все еще интересно узнать, что я делал неправильнов моей первоначальной попытке.
@echo off
setlocal EnableDelayedExpansion
set RemoveStrings="[ www.AnnoyingSpam.com ]",
Rem RemoveStrings variable notes:
Rem Surround strings to remove with double quotes.
Rem Separate each separate string to remove with a comma.
goto :main
: trim_leading_spaces VariableName
setlocal EnableDelayedExpansion
set "_=!%~1!"
set _=%_:"=%
: trim_leading_spaces__while
if "%_:~0,1%"==" " ( set "_=%_:~1%"& goto :trim_leading_spaces__while)
endlocal & set "%~1=%_%"
goto :eof
: trim_trailing_spaces VariableName
setlocal EnableDelayedExpansion
set "_=!%~1!"
set _=%_:"=%
: trim_trailing_spaces__while
if "%_:~-1%"==" " ( set "_=%_:~0,-1%"& goto :trim_trailing_spaces__while)
endlocal & set "%~1=%_%"
goto :eof
: main
for /f "delims=" %%I in ( dir /b /a:-d ^| findstr /vixc:"%~nx0" ) do (
Set file = "%%~I"
for %%J in (%REMOVESTRINGS%) do set "file=!FILE:%%~J=!"
call :trim_leading_spaces file
call :trim_trailing_spaces file
for %%J in ("!FILE!") do set "NewDirName=%%~nJ"
md "!NEWDIRNAME!"
ren "%%~I" "!FILE!"
move "!FILE!" "!NEWDIRNAME!"
)