<p>J’essaie de faire une opération de remplacement de chaîne sur tous les fichiers sauf ceux du dossier .git et tous les répertoires <strong>pycache</strong> qui peuvent apparaître imbriqués dans n’importe quel répertoire imbriqué. J’exécute le script dans le répertoire racine qui contient un dossier .git.</p>
<pre><code class="lang-auto">for /r /d %%F in (*) do (
echo Checking: %%F
if not "%%xF"==".sh" if not "%%xF"==".png" if not "%%xF"==".bat" if not "%%dpF"=="pycache\" if not "%%dpF"==".git\" (
echo Found file: %%F
findstr /C:"{{ADDON_NAME_PACKAGE}} {{ADDON_NAME}} {{ADDON_NAME_FULL}}" "%%F" >nul 2>&1
if not errorlevel 1 (
echo %%F
set "file=%%F"
setlocal DisableDelayedExpansion
set "cmd=sed -i -e ""s/%replace_package%/%package_name%/g"" -e ""s/%replace_addon_name%/%addon_short_name%/g"" -e ""s/%replace_addon_name_full%/%addon_full_name%/g"" ""!file!""
endlocal & !cmd!
echo Replaced placeholders in !file!
)
)
)
</code></pre>
<p>Mais je suis bloqué dans la condition <em>if</em> de cette boucle qui affiche toujours tous les fichiers du dossier .git même s’il est exclu avec <code>if not "%%dpF"==".git\"</code>. Pourquoi ? Je ne trouve aucune solution à ça, même ChatGPT ne peut pas me le dire. Comment est-ce possible que l’IA ne connaisse pas ça ? De plus <code>if not "%%dpF"=="%CD%.git\"</code> ne fonctionne pas non plus.</p>
<pre><code class="lang-auto">for /r /d %%F in (*) do (
echo Checking: %%F
if not "%%xF"==".sh" if not "%%xF"==".png" if not "%%xF"==".bat" if not "%%dpF"=="pycache\" if not "%%dpF"==".git\" (
echo Found file: %%F
</code></pre>
<p>ce qui affiche toujours les fichiers dans le dossier .git et les dossiers <strong>pycache</strong>. C’est tellement facile à réaliser sous Unix/Linux</p>
<pre><code class="lang-auto">replace_package="{{ADDON_NAME_PACKAGE}}"
replace_addon_name="{{ADDON_NAME}}"
replace_addon_name_full="{{ADDON_NAME_FULL}}"
perform_replacements() {
local file="$1"
local package_name="$2"
local addon_short_name="$3"
local addon_full_name="$4"
sed -i "s/${replace_package}/${package_name}/g; s/${replace_addon_name}/${addon_short_name}/g; s/${replace_addon_name_full}/${addon_full_name}/g" "$file"
}
find . ( -name .git -o -name pycache ) -prune -o ( -type f -not -name ".sh" -not -name ".png" ) -print0 | while IFS= read -r -d '' file; do
perform_replacements "$file" "$package_name" "$addon_short_name" "$addon_full_name"
echo "Replaced placeholders in $file"
done
</code></pre>
<p>Donc je ne comprends pas pourquoi c’est si compliqué dans les fichiers .bat sous Windows de faire la même chose ? Qu’est-ce qui se passe ?</p>