Мне нужно переместить, а затем удалить каталоги, где файл находился с диска. Структура выглядит следующим образом:Команда rmdir в файле пакетного скрипта не работает должным образом
./Export
/Report_1
/12345
/something.pdf
/Report_2
...
Мой код выглядит следующим образом:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
cd Export
for /D %%I in (%~dp0Export\*) do (
set "input=%%~nI"
for /f "tokens=2 delims=_" %%a in ("!input!") do (
md %~dp0new_reports\new_report_%%a
cd Report_%%a
for /R %%f in (*.pdf) do (
for %%S in (%%f) do (
if %%~zS NEQ "0" (
move %%f %~dp0new_reports\new_report_%%a
cd ..
set "id=%%a"
echo !id!
rmdir /S /Q "%~dp0Export\Report_!id!\"
)
)
)
)
)
@echo Finished ....
Но RmDir удаляет только вложенную папку с ID (/12345), но папка Report_1 все еще там, но пусто. Я попробовал echo «% ~ dp0Export \ Report_! Id! \", и все выглядит нормально.
Так в конце структуры сценария выглядит следующим образом:
./Export
/Report_1
/Report_2
...
и мне нужно удалить папки Report_1 и так далее, а также.
Если я копирую команду для консоли, она работает, но в пакетном скрипте она не работает, как мне нужно.
Это программирование _batch_ под Windows, а не программирование _bash_ на системах * nix. Удаление тега – Inian
Спасибо за редактирование. Виноват. – Bulva
1. Замените 'cd Export' на' cd/D '% ~ dp0Export "'; замените 'cd Report _ %% a' на' pushd 'Report _ %% ~ a "'; добавить 'popd' после закрытия') 'цикла' for/R %% f'; удалите 'cd ..'. 2. Измените внешний цикл: 'for/D %% I in ("% ~ dp0Export \ Report_ * ") do ('. 3. Нет необходимости в цикле 'for %% S', просто получите доступ к' %% ~ zf' вместо 4. Установить переменную 'input' в' %% ~ fI' 5. Не определять переменную 'id', просто обращаться к' %% ~ a'. 6. Использовать кавычки: 'move '%% ~ f ""% ~ dp0new_reports \ new_report _ %% ~ a "'. 7. Измените командную строку 'rmdir':' rmdir/S/Q '% ~ dp0Export \ %% ~ I "'. – aschipfl