#PowerShell, 147 bytes
PowerShell, 147 bytes
param($a)function z{param($n,$d)ls $n.fullname|%{$f=$_.mode[0]-ne"d";Write-Host(" "*$d*4)"$($_.name)$(("\")[$f])";If(!$f){z $_($d+1)}}}$a;z(gi $a)1
Man, I feel like PS should be able to do something like the bash answer, but I'm not coming up with anything shorter than what I've got here.
Explanation:
param($a) # assign first passed parameter to $a
function z{param($n,$d) ... } # declare function z with $n and $d as parameters
ls $n.fullname # list out contents of directory
|%{ ... } # foreach
$f=$_.namde[0]-ne"d" # if current item is a file, $f=true
Write-Host # writes output to the console
(" "*$d*4) # multiplies a space by the depth ($d) and 4
"$($_.name)$(("\")[$f])" # item name + the trailing slash if it is a directory
;if(!$f){z $_($d+1)} # if it is a directory, recursively call z
$a # write first directory to console
z(gi $a)1 # call z with $a as a directoryinfo object and 1 as the starting depth