
Я пытаюсь преобразовать собранный вместе скрипт Linux в командную строку Windows. Итак, ниже представлен мой скрипт, не слишком изящный, но каким-то образом он работает.
rar a -r0 boomer.rar
#combines all the files into a rar file
mkdir 'rar - '"${PWD##*/}"
#makes a new sub-dir named the same as parent with "rar - " prepended
cp boomer.rar 'rar - '"${PWD##*/}"
#copies boomer.rar to the new folder (see below*)
rm boomer.rar
#removes rar file *becuse I couldn't just get it to move in linux
cd 'rar - '"${PWD##*/}"
# move focus to new dir
for fname in *.rar
do
mv $fname 'boomer - '"$(pwgen 26 1).rar"
done
#renames files
РЕДАКТИРОВАТЬ:
[Добавляю эту часть, чтобы объяснить, чего я пытаюсь добиться. Цель этого скрипта — заархивировать все файлы в папке. EX c:\boomer\egret это создает boomer.rar Новая папка создается с именем "rar - egret" C:\boomer\egret\rar - egret boomer.rar копируется в "rar - egret" и удаляется изменение каталога на "rar - egret" переименование boomer.rar в "boomer - ahs7Ahxei2imah4tubiqu1eY2i.rar" затем вся папка "rar-egret" будет перемещена в место хранения позже.]
Я не могу понять, как сделать "${PWD##*/}". Мне нужна помощь с этой частью. Нужно получить только имя каталога, а не путь.
Я не кодер ни в коем случае. Это все собрано из шагов исследования на форумах, подобных этому. Я невежественен и не понимаю код, который использовал. Извините, но иногда обезьяна нажимает нужные клавиши.
Меня попросили члены моего круга сделать это на Windows. Я работаю над наименьшим общим знаменателем, поэтому пакетные файлы. WSL не устанавливается, только ванильная Windows.
Если это слишком сложно, я согласен. Если нужно больше информации, я предоставлю столько, сколько потребуется, но я не знаю, пока мне не скажут.
решение1
Мы не должны писать код за вас.
Далее следуют советы о том, как это написать. Надеюсь, вы сможете их воспринять.
Первую команду (mkdir) можно выполнить только с помощью небольшой программы, поэтому я включаю ее сюда, остальное будет предложениями о том, как написать ее самостоятельно, надеюсь, это имеет смысл.
Хорошо, насколько я могу судить, нет переменной, назначенной имени непосредственной родительской папки, но это все равно можно сделать. Первую строку придется заменить на это:
call :Makedir
затем добавьте эту процедуру в конец вашего скрипта:
:MakeDir
set _dir=%~p0
SET _dir2=%_dir:\= %
call :FindParent %_dir2:~1,-1%
mkdir "rar - %Parent%"
goto :eof
:FindParent
if "%1"=="" goto :eof
set Parent=%1 & shift & goto :FindParent
...который создаст ваш каталог для вас. Остальное вам придется написать самостоятельно, но вот как к этому подойти:
В следующей строке cp
будет заменено на copy
и, возможно, вставлено "/y", поэтому попробуйте copy /y
вместо 'cp'. Из командной строки попробуйте copy /?
для получения подробностей.
В следующей строке rm
будет заменено на del /y
и, возможно, вставлен "/f", поэтому попробуйте del /y /f
вместо rm
. Из командной строки попробуйте del /?
для получения подробной информации.
Вам все еще нужно переместить файл в место назначения, эквивалентом 'mv' является просто move
( для получения подробной информации), а для генерации случайного символа используйте %rnd%. В CMD эквивалента move /?
нет .pwgen
Надеюсь, этого достаточно, чтобы вы во всем разобрались. Это можно сделать, но мне не разрешено все это за вас расписывать.