Я использую программу под названием «Простое контекстное меню», которая позволяет мне создавать настраиваемые контекстные меню, когда вы щелкаете правой кнопкой мыши в проводнике.Я хотел создать свой собственный пункт контекстного меню, который позволяет мне копировать файл и структуру его родительских папок в другой каталог, исключая все файлы в папках с данными.
Пример:
target file path: C:\the\big\foo\bar.txt
destination path: D:\cow
Я хочу, чтобы файл «bar.txt» и его родительские папки вплоть до «большого» копировались в каталог «корова» без других файлов в «большом» или «foo».Конечный результат должен выглядеть следующим образом:
D:\cow\big\foo\bar.txt
'big' должен содержать только 'foo', а 'foo' должен содержать только 'bar.txt'.Программа позволяет мне отправить файл в качестве параметра в файл по моему выбору, в данном случае это командный файл.
Я застрял в цикле for в подпрограмме ': main'. Это будет толькопечатать весь путь выбранного файла и игнорирует разделитель. 'countA' возвращается как '1' после цикла, и он напечатал бы весь путь минус буква диска. Я не понимаю, почему цикл for игнорирует разделитель ине разделяя путь на отдельные имена папок. Причина, по которой я пытаюсь это сделать, заключается в том, что пользователь может выбирать, в какой момент следует копировать родительские папки.полностью понимать 'setlocal' и некоторые другие вещи.
Я попытался изменить токены и могу выбрать отдельные разделы между слешами, но я никогда не могу захватить всю строку как отдельные кускиЯ также изменил разделитель и получил ту же проблему.
@echo off
setlocal
set _target=""
set _dest=""
if not exist %1 goto:error_no_path
set _target=%~pnx1
echo %_target%
goto :dest_selct
:dest_selct
echo select destination folder
pause
set "psCommand="(new-object -COM 'Shell.Application')^
.BrowseForFolder(0,'Please choose destination folder.',0,0).self.path""
for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "folder=%%I"
setlocal enabledelayedexpansion
echo You chose %folder%
choice /c ync /n /m "Is this correct? ([Y]es, [N]o, [C]ancel)"
if %ERRORLEVEL% EQU 3 goto:eof
if %ERRORLEVEL% EQU 2 goto:dest_selct
if %ERRORLEVEL% EQU 1 (set _dest="%folder%")&&(goto:main)
:error_no_path
ECHO No file path/name
pause
GOTO:eof
:main
echo main
set _countA=0
echo count starts at %_countA%
for /f "tokens=* delims=\" %%F in ("%_target%") do (
echo token %_countA% is %%F
echo count is %_countA%
set var!_countA!=%%F
set /a countA+=1
)
echo var1: %var1%
echo count is now %countA%
pause
Я должениметь в конце более одной переменной, каждая из которых представляет собой имя папки, которая является родительским для целевого файла, и количество должно быть равно количеству родительских папок плюс сам файл.На самом деле я получаю одну переменную, которая по-прежнему содержит весь целевой путь.