Windows

語言中立遞歸獲取

  • March 4, 2020

.batWindows 的 cmd.exe 文件中,遞歸獲取文件夾內容的所有權

takeown /f foldername /r /d Y >nul: 2>&1

問題是,它僅在目前語言環境中Yes的單詞以字母 開頭時才有效Y。例如它在法語中失敗,它使用Oui,因此需要O.

任何解決方法?

您可以使用該COPY命令來確定機器使用的“是”響應。

@echo off
setlocal
for /f "delims=(/ tokens=2" %%Y in (
 '"copy /-y nul "%~f0" <nul"'
) do if not defined yes set "yes=%%Y"
takeown /f foldername /r /d %yes% >nul 2>&1

%yes%值將是整個單詞,而不僅僅是第一個字母。我認為這會很好。但如果我錯了,你可以簡單地使用%yes:~0,1%

更新 正如 fgrieu 在他的評論中指出的那樣,如果腳本路徑包含(. 由於其他特殊字元導致的失敗可以通過放棄外部雙引號並轉義重定向來修復。但這(是有問題的。

這是一種替代策略,只要%temp%指向使用者具有寫入權限的有效文件夾即可。它會創建一個名稱已知不會引起問題的文件。如果文件已經存在,%temp%那麼它是不受干擾的。

@echo off
setlocal
pushd "%temp%"
if not exist getYes.tmp (call ) >>getYes.tmp
set "yes="
for /f "delims=(/ tokens=2" %%Y in (
 '"copy /-y nul getYes.dummy <nul"'
) do if not defined yes set "yes=%%Y"
takeown /f foldername /r /d %yes% >nul 2>&1

我想不能保證 COPY 和 TAKEOWN 使用相同的 yes 響應,但如果他們不這樣做,我會感到震驚。

引用自:https://serverfault.com/questions/1004629