Как получить полный список подкаталогов (включая подкаталоги подкаталогов)?
У меня тысячи городских папок (напримерcity1
, city2
и так далее, но на самом деле назван какNewYork
, Boston
, так далее.). Каждая папка дополнительно содержит две подпапки:land
а такжеhouse
.
Таким образом, структура каталогов выглядит так:
current dictionary
---- city1
----- house
------ many .xlsx files
----- land
----- city2
----- city3
···
----- city1000
Я хочу получить полный список всех подкаталогов и сделать некоторые манипуляции (например,import excel
). Я знаю, что есть макро расширенная функция:local list: dir
чтобы решить эту проблему, но, кажется, он может только вернутьfirst tier
подкатегорий, какcity_i
а не те, что глубже.
В частности, если я хочу принять меры во всех домашних папках, какой рабочий процесс мне нужен?
Я сделал первоначальную попытку написать код для достижения моей цели:
cd G:\Data_backup\Soufang_data
local folder: dir . dirs "*"
foreach i of local folder {
local `i'_house : dir "G:\Data_backup\Soufang_data\``i''\house" files "*.xlsx"
local count = 1
foreach j of local `i'_house {
cap import excel "`j'",clear
cap sxpose,clear
cap drop in 1/1
if `count'==1 {
save `i'.dta, replace
}
else {
cap qui append using `i'
save `i'.dta,replace
}
local ++count
}
}
Что-то не так с:
``i''
в директории я изо всех сил пытался заставить это работать без успеха, так или иначе.
я имеюдругой пост на этом проекте.
Дополнительные замечания:
Как отмечает Ник, проблема заключается в обратном слэше. Переходя от этого момента, я сталкиваюсь с другой проблемой. Скажем, без сложных действий я просто хочу проверить, работают ли мои циклы, поэтому я пишу следующий фрагмент кода:
set more off
cd G:\Data_backup\Soufang_data
local folder: dir . dirs "*"
foreach i of local folder {
di "`i'"
local `i'_house : dir "G:\Data_backup\Soufang_data/`i'\house" files "*.xlsx"
foreach j of local `i'_house {
di "`j'"
}
}
Тем не менее, результат на экране выглядит примерно так:
city1
project100
project99
······
project1
Кажется, код только зацикливается на один раунд, над первым городом, но не может прийти кcity2
, city3
и так далее. Я подозреваю, что это из-за моего проблемного написания местного, особенно в этой строке, но я не уверен:
foreach j of local `i'_house