Is it possible to check all installed Steam games for integrity?
My hard drive started to fail recently. I've managed to copy almost all data to another drive, but 280 sectors (140kB) were corrupted. Since that drive also contains my Steam library, I want to check it for any corruption.
However, I don't want to right-click >200 game title's in my library, go to their properties, local data and verify the installation. Is there a way to check the integrity of all installed Steam games? Or do I have to check them one-by-one?
Solution 1:
Steam doesn't provide a way to check the integrity of all of your games at once. However, someone has made a script that you can try to run that verifies all of your games in one shot.
A link to the Reddit post can be found here. It gives an overview of what the script is. In order to run this script, you will need AutoIt. After downloading AutoIt, you can run the script. According to the post, you should be able to even see what the script is composed of as well.
The Reddit posts points out a few things to keep in mind:
- Your computer should not be actively in use when the script is running
- Steam windows showing the game that is being verified will still pop-up, but they should be automatically be closed upon completion. If you are using other programs with the tool running, it is possible it may close the wrong window
- You can skip specific games if you wish by adding the games SteamId to the "validationBlacklist.txt" file in this format:
15620 20570 220240 19900 50130 50620
There is also a link to a self-contained .exe version of the script, however the link for that one does not appear to want to work (at least for me). Note that you should also be cautious when downloading files like this off the internet, so take any chances at your own risk! Also be sure to follow the instructions listed in the Reddit post. It is a bit of a lengthy one to post all of it here.
Solution 2:
Building off of @Tobu 's answer, for windows, since similar utilities for parsing text is much harder on windows, I went for a cross-platform solution.
You can follow the directions for installing steamcmd
for your platform at https://developer.valvesoftware.com/wiki/SteamCMD
(You'll need to run it once first to finish the install)
I'm looking at creating a github project for this, so I can auto-build deno binaries with this embedded so you wouldn't have to install deno to run this. I'll update if I finish that.
I have a slightly more complete script in a github gist if you want to look at that: https://gist.github.com/josh-hemphill/25f73281faf08f0be0ed72b2cd2aa1da
Using Deno
for the scripting, I achieved the same thing with some code like this.
// ran using deno run -A ./this-script.ts <my username> <steam library directory>
let user = Deno.args[0]
let lib = Deno.args[1]
await Deno.run({cmd:['steamcmd','+login',user,'+quit']}).status()
const p = Deno.run({
cmd: [
"steamcmd",
"+force_install_dir",
lib,
"+login",
user,
"+apps_installed",
"+quit",
],
stdout: "piped",
});
await p.status();
const output = new TextDecoder().decode(await p.output());
const games = output.split("\n").filter((v) => v.startsWith("AppID")).map(
(v) => {
const cols = v.split(" : ");
return {
id: cols[0].split(" ")[1],
name: cols[1].slice(1, cols[1].length - 2),
dir: cols[2].replace(" \r", ""),
};
},
);
for (const game of games) {
await Deno.run({
cmd: [
"steamcmd",
"+force_install_dir",
lib,
"+login",
user,
"+app_update",
game.id,
"validate",
"+quit",
],
}).status();
}
Solution 3:
Here is a way to recheck and update all installed games, on Linux, using steamcmd.
Steamcmd is closed source and updates itself from the net, similar to the Steam client; the useful thing is that it works from the CLI.
Install steamcmd from Ubuntu multiverse or https://media.steampowered.com/installer/steamcmd_linux.tar.gz. It will self-update on first run.
If some of your libraries are on removable media, check that they are all active in Steam's settings, Download section. Close Steam.
Substitute your Steam login name in the following command, and run:
steamcmd +login $mylogin $(
steamcmd +login $mylogin +apps_installed +quit \
|grep -Po '(?<=^AppID )[0-9]+(?= : )' \
|sort -V \
|while read appid; do \
echo +app_update "$appid" validate; done \
) +quit
The checks take some time, but should run unattended.
It's possible to get spurious errors if your connection is flaky;
you can insert something like |awk 'f{print} /$lastsuccessappid/{f=1}'
immediately after the |sort -V
term to continue after the last successful check.