Variables & Wildcards

Audience: IT admins. This page gives many examples of path variables and wildcards in policies, jobs, and paths so you can match applications and folders across users, versions, and install locations.
For the full list of variables and wildcard rules, see Reference: Variables and Reference: Wildcards.
Quick Reminder
Variables:
{userprofile},{programfiles},{localappdata}, etc. Resolve to real paths at evaluation time. Use backslash (\) on Windows and forward slash (/) on Linux/macOS in patterns.Wildcards:
*in an application path means “any characters” in that segment. In folder filters (Extension.Folders), only prefix matching is used—no*in the folder path.Combined: Resolve the variable first, then match; e.g.
{userprofile}\*\*.exematches any.exein any subfolder of the user profile.
Combining Variables and Wildcards
Variables and wildcards can be used together in application or file path patterns. The variable is resolved first (e.g. to the user’s profile path), then the * matches any characters in that path. This lets one pattern cover many versions or install locations.
Examples:
{userprofile}\AppData\Local\GitHubDesktop\*\resources\app\git\cmd\git.exe
Git shipped with GitHub Desktop, for any version folder (e.g. app-3.2.1 or app-3.3.0) under the user’s local AppData.
{localappdata}\*\*\*.exe
Any .exe nested three levels deep under the user’s Local AppData (e.g. per-app versioned folders).
{programfiles}\*\*\*.exe
Any .exe in any subfolder of Program Files (e.g. C:\Program Files\Vendor\Product\bin\app.exe).
{userprofile}\Documents\*\*.pdf
Any PDF in any one-level subfolder of the user’s Documents.
{appdata}\*\*.exe
Any .exe in any one-level subfolder of the user’s Roaming AppData.
Notes:
Use backslash (
\) on Windows and forward slash (/) on Linux/macOS in patterns when writing OS-specific rules; path variables resolve to the correct separator per platform.One
*matches any characters (including none) in that segment; multiple*segments allow multiple variable-depth folders (e.g. version numbers, app names).
Examples
1. Versioned or Install-Variant Apps (one pattern, many versions)
Use a single * (or multiple * segments) where the path has a version or build folder so one policy covers all versions.
{userprofile}\AppData\Local\GitHubDesktop\*\resources\app\git\cmd\git.exe
Git bundled with GitHub Desktop; * matches version folders like app-3.2.1, app-3.3.0.
{localappdata}\Programs\*\*\*.exe
Apps installed under Local\Programs with vendor/product/version structure.
{programfiles}\Microsoft VS Code\*\Code.exe
VS Code for any installed version folder.
{programfiles}\*\*\bin\*.exe
Any vendor’s bin folder three levels under Program Files.
{programfilesx86}\*\*\*.exe
Any 32-bit app in a three-level subfolder of Program Files (x86).
2. User Profile and AppData (per-user paths)
Variables like {userprofile}, {appdata}, {localappdata} resolve to the requesting user’s paths. Use them so the same policy works for every user.
{userprofile}\*.exe
Any .exe directly in the user’s profile folder.
{userprofile}\Documents\*.exe
Any .exe in the user’s Documents.
{userprofile}\Documents\*\*.pdf
Any PDF in any one-level subfolder of Documents.
{appdata}\*\*.exe
Any .exe in any one-level subfolder of Roaming AppData (e.g. AppData\Roaming\Vendor\app.exe).
{localappdata}\*\*\*.exe
Any .exe three levels deep under Local AppData (covers versioned app folders).
{userdesktop}\*.lnk
Any shortcut on the user’s desktop.
{userprofile}\Downloads\*.exe
Any .exe in the user’s Downloads (Windows; use {downloads} on macOS).
3. System and Program Files (same for all users)
These resolve to the same path for everyone on the machine. Use them for system tools and installed software.
{system32}\*.exe
Any executable directly in System32.
{system32}\*\*.exe
Any .exe in any one-level subfolder of System32.
{programfiles}\*\*.exe
Any .exe in any one-level subfolder of Program Files.
{programfiles}\*\*\*.exe
Any .exe in any subfolder up to three levels deep (e.g. Vendor\Product\bin\app.exe).
{programfiles}\*\*\*\*.exe
Deeper vendor/product/version/bin layouts.
{syswow64}\*.exe
32-bit executables in SysWOW64.
{programdata}\*\*.exe
Any .exe in any one-level subfolder of ProgramData.
4. Keeper App Paths (plugin and job configs)
Use application variables so config works regardless of install directory.
{approot}\Plugins\KeeperPolicy\KeeperPolicy.exe
Plugin executable path in a plugin JSON.
{pluginroot}\KeeperPolicy\bin\Release\net8.0\KeeperPolicy
Plugin path using plugin root.
{jobroot}\bin\MyTool\MyTool.exe
Job executable in the Jobs tree.
{approot}\Localization\LocaleValues.json
Path to a locale file in documentation or scripts.
5. Folder Filter (Extension.Folders) — prefix only, no *
*Folder filters use prefix matching: “Does the full path start with this folder?” You can use variables; you cannot use wildcards in the folder path (the * would be literal).
{downloads}
Every file under the user’s Downloads (and subfolders).
{userprofile}
Every file under the user’s profile.
{documents}
Every file under the user’s Documents.
{desktop} or {userdesktop}
Every file on the user’s desktop and in desktop subfolders.
{programfiles}
Every file under Program Files.
{localappdata}
Every file under the user’s Local AppData.
Wrong: {downloads}\* — the * is treated as a literal character, not “any subfolder.” Use {downloads} to mean “all of Downloads.”
6. ApplicationCheck + Extension.Folders (combined)
When ApplicationCheck has a filename pattern (e.g. *.exe) and Extension.Folders is set, the product can build full path patterns. Examples:
*.exe
{userdesktop}
All .exe on the user’s desktop.
*.exe
{downloads}
All .exe in the user’s Downloads (and subfolders).
*.pdf
{documents}
All PDFs under the user’s Documents.
*.exe
{programfiles}
All .exe under Program Files (very broad).
*.exe
{localappdata}
All .exe under the user’s Local AppData.
7. Linux and macOS
On Linux/macOS use forward slashes and the appropriate variables. Many executables have no extension.
{home}/*
Any file in the user’s home directory.
{home}/bin/*
Any file in the user’s bin (or ~/bin).
{usr}/bin/*
Any file in /usr/bin.
{usr}/local/bin/*
Any file in /usr/local/bin.
{applications}/*.app
Any .app in /Applications (macOS).
{downloads}/*
Any file in the user’s Downloads (macOS).
{library}/*
Any file under /Library (macOS).
8. Job and Plugin JSON Paths (executablePath, arguments)
Variables in executablePath or task paths are resolved when the job or plugin runs.
{jobroot}/bin/RedirectEvaluator/RedirectEvaluator
Redirect evaluator executable in the Jobs tree.
{approot}\Jobs\bin\MyScript.exe
Script under the application root.
{pluginroot}\KeeperPolicy\bin\Release\net8.0\KeeperPolicy.exe
Plugin exe path in plugin JSON.
{userprofile}\AppData\Local\MyApp\run.exe
User-specific app launched by a job (resolved for the target user when applicable).
9. Narrowing by Path Depth (one vs multiple *)
*)One
*= one path segment (e.g. one folder name).Multiple
*= multiple segments (version/product/vendor structure).
{programfiles}\*.exe
One segment
C:\Program Files\SomeApp.exe (rare).
{programfiles}\*\*.exe
Two segments
C:\Program Files\Vendor\app.exe.
{programfiles}\*\*\*.exe
Three segments
C:\Program Files\Vendor\Product\app.exe.
{localappdata}\*\*.exe
Two segments
C:\...\Local\Vendor\app.exe.
{localappdata}\*\*\*.exe
Three segments
C:\...\Local\Vendor\Version\app.exe.
10. Real-World Policy Examples (conceptual)
Allow Git from GitHub Desktop (any version): Application path:
{userprofile}\AppData\Local\GitHubDesktop\*\resources\app\git\cmd\git.exeScope a policy to “all executables in user Downloads”: ApplicationCheck:
*.exe; Extension.Folders:{downloads}(or the platform equivalent).Match any 32-bit app in Program Files (x86):
{programfilesx86}\*\*\*.exe(adjust*count to your typical depth).Match a tool in the Keeper Jobs bin: In a job task:
executablePath:{jobroot}\bin\MyTool\MyTool.exe.Deny executables only in a specific user folder: Use ApplicationCheck with a path like
{userprofile}\Documents\Scripts\*.exeor combine with Extension.Folders{userprofile}\Documents\Scriptsand ApplicationCheck*.exe.
11. What to Avoid
*in Extension.Folders: e.g.["{downloads}\\*"]— use["{downloads}"]for “all of Downloads.”Case on Linux/macOS: Paths and extensions are case-sensitive; e.g.
*.EXEwon’t matchscript.exeon Linux.Overly broad patterns:
{programfiles}\*\*.exematches every.exein any two-level subfolder of Program Files; use filters (users, machines, other rules) to narrow scope.Mixing slashes on Windows: Prefer backslash in Windows paths; the product typically normalizes, but consistent
\avoids confusion.
Reference
Reference: Variables — All built-in variables (Windows, Linux, macOS, app-specific), custom variables, protected paths.
Reference: Wildcards — Application wildcards, folder prefix matching, what to avoid.
Last updated
Was this helpful?

