<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: arnostorg</title>
    <description>The latest articles on DEV Community by arnostorg (@arnostorg).</description>
    <link>https://dev.to/arnostorg</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1724213%2Fbf22ff52-4243-4658-b3c1-0722d1a13b17.webp</url>
      <title>DEV Community: arnostorg</title>
      <link>https://dev.to/arnostorg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arnostorg"/>
    <language>en</language>
    <item>
      <title>PowerShell Clear-Content: Empty Files Without Deleting Them</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Mon, 28 Sep 2026 07:21:50 +0000</pubDate>
      <link>https://dev.to/arnostorg/powershell-clear-content-empty-files-without-deleting-them-3e6p</link>
      <guid>https://dev.to/arnostorg/powershell-clear-content-empty-files-without-deleting-them-3e6p</guid>
      <description>&lt;p&gt;The PowerShell &lt;strong&gt;Clear-Content&lt;/strong&gt; cmdlet empties a file’s contents but &lt;strong&gt;keeps the file itself&lt;/strong&gt;. The path stays; the bytes go. That is the opposite of deleting the file, and different from rewriting it with new text.&lt;/p&gt;

&lt;p&gt;For the official reference, see Microsoft Learn’s &lt;a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/clear-content" rel="noopener noreferrer"&gt;Clear-Content&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Want to practice PowerShell in a live browser terminal (no install)? Try the free interactive lessons on &lt;a href="https://windows-cli.arnost.org/en/powershell" rel="noopener noreferrer"&gt;CMD Master — PowerShell file management&lt;/a&gt;. CMD Master is a free online interactive learning platform for the command line: practice CMD, PowerShell, and Bash in a live browser terminal with instant feedback — no VM or local setup. Most lessons are free; premium unlocks deeper paths.&lt;/p&gt;

&lt;h2&gt;
  
  
  Empty one file
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Clear-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\log.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this runs, &lt;code&gt;log.txt&lt;/code&gt; still exists (same name, same folder), but &lt;code&gt;Get-Content .\log.txt&lt;/code&gt; returns nothing. Size goes to zero (or near-zero, depending on filesystem metadata).&lt;/p&gt;

&lt;p&gt;The short alias works the same way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;clc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\log.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Clear several logs with wildcards
&lt;/h2&gt;

&lt;p&gt;Target a pattern when you want to reset a batch of files without removing them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Clear-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\logs\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or pipe specific items:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\logs\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Where-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$_&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-gt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;MB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Clear-Content&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That pattern is useful when old log files must keep their names for an app that reopens the same path every boot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preview with -WhatIf and -Confirm
&lt;/h2&gt;

&lt;p&gt;Before wiping production-sized logs, dry-run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Clear-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\logs\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-WhatIf&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PowerShell prints what it &lt;em&gt;would&lt;/em&gt; clear and touches nothing. For an interactive check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Clear-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app.cache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Confirm&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get a yes/no prompt per target. Use these flags until the path filter looks right.&lt;/p&gt;

&lt;h2&gt;
  
  
  Clear-Content vs Remove-Item vs Set-Content
&lt;/h2&gt;

&lt;p&gt;Keep the three mental models straight:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Empty the file, keep the path&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Clear-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\scratch.txt&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Delete the file entirely&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Remove-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\scratch.txt&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Replace contents with a new value (here: an empty string)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Set-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\scratch.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Cmdlet&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Empty file, keep path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Clear-Content&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete the file&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Remove-Item&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write / overwrite text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Set-Content&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Append text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Add-Content&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Get-Content&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;Set-Content ""&lt;/code&gt; can look similar to clearing, but it is still a write of new content (and may change encoding). Prefer &lt;code&gt;Clear-Content&lt;/code&gt; when your intent is “make this file empty.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Realistic example: rotate a log without breaking the path
&lt;/h2&gt;

&lt;p&gt;Many services expect &lt;code&gt;C:\Apps\MyService\app.log&lt;/code&gt; to exist. Deleting it can break the next write. Emptying it keeps the contract:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Apps\MyService\app.log"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$archive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Apps\MyService\archive\app-&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="n"&gt;Get-Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'yyyyMMdd-HHmmss'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.log"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Keep a copy of today’s noise, then empty the live file&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Test-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;New-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ItemType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Directory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Split-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$archive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Out-Null&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nx"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$archive&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Clear-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-WhatIf&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# remove -WhatIf when ready&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Clear-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same idea for temp scratch files your script reuses every run: clear once at start instead of deleting and recreating.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Need an empty file that still exists → &lt;code&gt;Clear-Content&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Need the file gone → &lt;code&gt;Remove-Item&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Need brand-new text → &lt;code&gt;Set-Content&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Unsure which paths match → add &lt;code&gt;-WhatIf&lt;/code&gt; first&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practice it live
&lt;/h2&gt;

&lt;p&gt;CMD Master is a free online interactive learning platform for the command line. Practice PowerShell file commands in a live browser terminal with instant feedback — no install or VM. Start at &lt;a href="https://windows-cli.arnost.org/en/powershell" rel="noopener noreferrer"&gt;CMD Master PowerShell lessons&lt;/a&gt;; most lessons are free, with premium for deeper paths.&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>scripting</category>
      <category>windows</category>
      <category>beginners</category>
    </item>
    <item>
      <title>PowerShell Add-Content: Append Text to Files Fast</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Fri, 25 Sep 2026 07:25:36 +0000</pubDate>
      <link>https://dev.to/arnostorg/powershell-add-content-append-text-to-files-fast-dag</link>
      <guid>https://dev.to/arnostorg/powershell-add-content-append-text-to-files-fast-dag</guid>
      <description>&lt;p&gt;The PowerShell &lt;strong&gt;Add-Content&lt;/strong&gt; cmdlet appends text to a file. Use it when you want to keep existing lines and add more — the opposite of &lt;code&gt;Set-Content&lt;/code&gt;, which replaces the whole file.&lt;/p&gt;

&lt;p&gt;For the official reference, see Microsoft Learn’s &lt;a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/add-content" rel="noopener noreferrer"&gt;Add-Content&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Want to practice PowerShell in a live browser terminal (no install)? Try the free interactive lessons on &lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master — PowerShell file and text commands&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Append a line
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\log.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Started at &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="n"&gt;Get-Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;log.txt&lt;/code&gt; does not exist yet, PowerShell creates it. If it already has lines, your new value is written &lt;strong&gt;after&lt;/strong&gt; them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Append several lines
&lt;/h2&gt;

&lt;p&gt;Pass multiple strings and each becomes its own line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\notes.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Todo: backup"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Todo: test deploy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Todo: ping ops"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or build an array first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$entries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@(&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Build finished"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Tests passed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Artifact uploaded"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\build.log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$entries&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Append vs replace
&lt;/h2&gt;

&lt;p&gt;Remember the pair:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# wipe and rewrite the file&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Set-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\status.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fresh start"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# keep existing lines, add more&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\status.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Still running"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Set-Content&lt;/code&gt; means “make the file equal this.” &lt;code&gt;Add-Content&lt;/code&gt; means “append.” Mixing them up is how logs get accidentally wiped.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pipe output into a growing file
&lt;/h2&gt;

&lt;p&gt;Any string pipeline works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\inventory.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;"Heartbeat &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="n"&gt;Get-Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'HH:mm:ss'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\health.log&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That pattern is ideal for inventories, heartbeat files, and append-only audit trails.&lt;/p&gt;

&lt;h2&gt;
  
  
  Encoding when tools care
&lt;/h2&gt;

&lt;p&gt;Be explicit when other tools expect UTF-8:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\events.jsonl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'{"ok":true}'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Encoding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;utf8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;-Encoding utf8&lt;/code&gt; (or &lt;code&gt;utf8BOM&lt;/code&gt; / &lt;code&gt;unicode&lt;/code&gt; when a consumer needs those) so appended bytes match the rest of the file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create the folder first if needed
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Add-Content&lt;/code&gt; writes the &lt;strong&gt;file&lt;/strong&gt;. Create a missing parent folder before the first append:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;New-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ItemType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Directory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\logs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Out-Null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\logs\app.log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Boot"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Safe append habit
&lt;/h2&gt;

&lt;p&gt;For important files, confirm the path before you grow it in a loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".\prod-notes.txt"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Test-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$path&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Set-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"# Prod notes"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Encoding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;utf8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="n"&gt;Get-Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; — deploy ok"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That keeps the first write intentional and every later write additive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick checklist
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Cmdlet&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Append lines&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Add-Content&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replace / create file text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Set-Content&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read file text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Get-Content&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copy the file itself&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Copy-Item&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Practice it live
&lt;/h2&gt;

&lt;p&gt;CMD Master is a free online interactive learning platform for the command line: practice in a live browser terminal with instant feedback, no install or VM. It covers Windows CMD, PowerShell, and Bash.&lt;/p&gt;

&lt;p&gt;Start here: &lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master — interactive PowerShell practice&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>scripting</category>
      <category>windows</category>
      <category>beginners</category>
    </item>
    <item>
      <title>PowerShell Set-Content: Write Text to Files Fast</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Wed, 23 Sep 2026 07:38:00 +0000</pubDate>
      <link>https://dev.to/arnostorg/powershell-set-content-write-text-to-files-fast-1dh4</link>
      <guid>https://dev.to/arnostorg/powershell-set-content-write-text-to-files-fast-1dh4</guid>
      <description>&lt;p&gt;The PowerShell &lt;strong&gt;Set-Content&lt;/strong&gt; cmdlet writes text into a file. It is the clear, readable way to create a new file or replace what is already there — cleaner than juggling &lt;code&gt;&amp;gt;&lt;/code&gt; redirects when you want intentional writes in scripts.&lt;/p&gt;

&lt;p&gt;For the official reference, see Microsoft Learn’s &lt;a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-content" rel="noopener noreferrer"&gt;Set-Content&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Want to practice PowerShell in a live browser terminal (no install)? Try the free interactive lessons on &lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master — PowerShell file and text commands&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write a simple file
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Set-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\hello.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hello from PowerShell"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That creates &lt;code&gt;hello.txt&lt;/code&gt; (or fully replaces it if it already exists) with one line of text. Multiple strings become multiple lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Set-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\notes.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Line one"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Line two"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Line three"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Replace vs append
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Set-Content&lt;/code&gt; &lt;strong&gt;replaces&lt;/strong&gt; the whole file. If you need to add lines without wiping what is there, use &lt;code&gt;Add-Content&lt;/code&gt; instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# wipe and rewrite&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Set-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\log.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fresh start"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# keep existing lines, add more&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\log.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Another entry"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remembering that split saves a lot of accidental data loss: &lt;code&gt;Set-Content&lt;/code&gt; means “make the file equal this”; &lt;code&gt;Add-Content&lt;/code&gt; means “append.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Write output from other commands
&lt;/h2&gt;

&lt;p&gt;Pipe any string output into &lt;code&gt;Set-Content&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Set-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\scripts-list.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yyyy-MM-dd HH:mm"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Set-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\last-run.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is handy for snapshots, inventories, and small status files your scripts leave behind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Encoding matters
&lt;/h2&gt;

&lt;p&gt;On Windows, default encoding can surprise you when tools expect UTF-8. Be explicit when you care:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Set-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\config.json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'{"env":"dev"}'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Encoding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;utf8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;-Encoding utf8&lt;/code&gt; (or &lt;code&gt;utf8BOM&lt;/code&gt; / &lt;code&gt;unicode&lt;/code&gt; when a consumer needs those) so cross-tool files stay readable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create folders first when needed
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Set-Content&lt;/code&gt; writes the &lt;strong&gt;file&lt;/strong&gt;. If the parent folder is missing, create it first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;New-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ItemType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Directory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Out-Null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;Set-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\out\readme.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Build artifacts go here"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Safe overwrite pattern
&lt;/h2&gt;

&lt;p&gt;When a file already holds something important, back it up, then rewrite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Test-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app.config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app.config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app.config.bak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Set-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app.config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$newConfig&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Encoding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;utf8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That habit pairs well with &lt;code&gt;Copy-Item&lt;/code&gt; and keeps experiments reversible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick checklist
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Cmdlet&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Replace / create file text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Set-Content&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Append lines&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Add-Content&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read file text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Get-Content&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copy the file itself&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Copy-Item&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Practice it live
&lt;/h2&gt;

&lt;p&gt;CMD Master is a free online interactive learning platform for the command line: practice in a live browser terminal with instant feedback, no install or VM. It covers Windows CMD, PowerShell, and Bash.&lt;/p&gt;

&lt;p&gt;Start here: &lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master — interactive PowerShell practice&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>scripting</category>
      <category>windows</category>
      <category>beginners</category>
    </item>
    <item>
      <title>PowerShell Copy-Item: Duplicate Files Fast and Safely</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Mon, 21 Sep 2026 07:31:47 +0000</pubDate>
      <link>https://dev.to/arnostorg/powershell-copy-item-duplicate-files-fast-and-safely-5846</link>
      <guid>https://dev.to/arnostorg/powershell-copy-item-duplicate-files-fast-and-safely-5846</guid>
      <description>&lt;p&gt;The PowerShell &lt;strong&gt;Copy-Item&lt;/strong&gt; cmdlet duplicates files and folders — the modern replacement for classic CMD &lt;code&gt;copy&lt;/code&gt; and &lt;code&gt;xcopy&lt;/code&gt;. When you need a backup of a config, to stage assets into a deploy folder, or to clone a directory tree with filters, &lt;code&gt;Copy-Item&lt;/code&gt; is clearer and safer than typing long &lt;code&gt;xcopy&lt;/code&gt; switches.&lt;/p&gt;

&lt;p&gt;For the official reference, see Microsoft Learn’s &lt;a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/copy-item" rel="noopener noreferrer"&gt;Copy-Item&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Want to practice PowerShell in a live browser terminal (no install)? Try the free interactive lessons on &lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master — PowerShell and command-line training&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does Copy-Item do?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\report.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\backup\&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That copies &lt;code&gt;report.txt&lt;/code&gt; into the &lt;code&gt;backup&lt;/code&gt; folder. If the destination is a folder that already exists, the file keeps its name. If the destination includes a new file name, PowerShell renames on copy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\report.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\backup\report-2026-09-21.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Copy one file or many
&lt;/h2&gt;

&lt;p&gt;Point &lt;code&gt;-Path&lt;/code&gt; at a single file, a wildcard, or several paths:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\notes.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\archive\&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\logs-backup\&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\a.txt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\b.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\out\&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the destination folder first when it might not exist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;New-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ItemType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Directory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\backup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;csv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\backup\&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Copy folders: -Recurse
&lt;/h2&gt;

&lt;p&gt;To copy a directory &lt;strong&gt;and everything inside it&lt;/strong&gt;, add &lt;code&gt;-Recurse&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\project-backup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Recurse&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without &lt;code&gt;-Recurse&lt;/code&gt;, PowerShell can create an empty destination folder (or fail, depending on version and path shape) — always use &lt;code&gt;-Recurse&lt;/code&gt; when you mean “copy the tree.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Overwrite existing files: -Force
&lt;/h2&gt;

&lt;p&gt;By default, &lt;code&gt;Copy-Item&lt;/code&gt; may refuse to overwrite a read-only or existing file. Use &lt;code&gt;-Force&lt;/code&gt; when you intentionally want to replace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app.config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\deploy\app.config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Be deliberate: &lt;code&gt;-Force&lt;/code&gt; skips the “are you sure?” friction. Prefer an explicit backup first when the destination is production config.&lt;/p&gt;

&lt;h2&gt;
  
  
  Filter while you copy
&lt;/h2&gt;

&lt;p&gt;Combine wildcards with &lt;code&gt;-Include&lt;/code&gt; / &lt;code&gt;-Exclude&lt;/code&gt; (often clearest when you pipe from &lt;code&gt;Get-ChildItem&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# copy only .ps1 scripts from a tree&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Filter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Recurse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\scripts-backup\&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or exclude junk folders by filtering upstream:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Recurse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Where-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$_&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FullName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-notmatch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'\\node_modules\\|\\.git\\'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Join-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\clean-copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;$_&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FullName&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Substring&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;Resolve-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For day-to-day work, a simple wildcard plus &lt;code&gt;-Recurse&lt;/code&gt; is usually enough:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\docs\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;md&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\site\content\&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Keep the original timestamps (when you care)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Copy-Item&lt;/code&gt; updates the &lt;em&gt;new&lt;/em&gt; file’s timestamps to “now.” If you need a byte-for-byte archival copy that preserves metadata, reach for &lt;code&gt;robocopy&lt;/code&gt; or a dedicated sync tool. For scripts and deploy staging, the default timestamps are fine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Copy-Item vs copy vs xcopy vs robocopy
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Copy-Item&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PowerShell scripts, pipelines, clear Verb-Noun readability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;copy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tiny one-file CMD jobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xcopy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Older batch trees with &lt;code&gt;/E&lt;/code&gt; / &lt;code&gt;/I&lt;/code&gt; habits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;robocopy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Large mirrors, retries, multi-thread, detailed logs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Prefer &lt;strong&gt;Copy-Item&lt;/strong&gt; when you are already in PowerShell. Prefer &lt;strong&gt;robocopy&lt;/strong&gt; for huge folder mirrors or scheduled backups.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safe habits
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Confirm the destination exists&lt;/strong&gt; (&lt;code&gt;Test-Path&lt;/code&gt; / &lt;code&gt;New-Item -Force&lt;/code&gt;) before a bulk copy.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;-WhatIf&lt;/code&gt;&lt;/strong&gt; to preview:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\archive\&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-WhatIf&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Prefer &lt;strong&gt;&lt;code&gt;-Recurse&lt;/code&gt;&lt;/strong&gt; for folders — never assume an empty folder copy did what you wanted.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;-Force&lt;/code&gt;&lt;/strong&gt; only when overwrite is intentional; backup first for critical files.&lt;/li&gt;
&lt;li&gt;Avoid copying &lt;code&gt;node_modules&lt;/code&gt;, &lt;code&gt;.git&lt;/code&gt;, or build caches unless you truly need them.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Practice it live
&lt;/h2&gt;

&lt;p&gt;Open a free PowerShell lesson on &lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master’s interactive CLI platform&lt;/a&gt; and try &lt;code&gt;Copy-Item&lt;/code&gt; in a real terminal in your browser — no VM, no install.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick cheat sheet
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\file.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\backup\&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\file.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\backup\renamed.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\folder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\folder-copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Recurse&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\logs\&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\src\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\out\&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-WhatIf&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once this clicks, pair it with &lt;code&gt;Get-ChildItem&lt;/code&gt; for discovery and &lt;code&gt;Remove-Item&lt;/code&gt; when you clean up after a copy. That trio covers most day-to-day file moves on Windows.&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>scripting</category>
      <category>windows</category>
      <category>beginners</category>
    </item>
    <item>
      <title>PowerShell Select-String: Find Text in Files Fast</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Fri, 18 Sep 2026 07:32:45 +0000</pubDate>
      <link>https://dev.to/arnostorg/powershell-select-string-find-text-in-files-fast-3ll2</link>
      <guid>https://dev.to/arnostorg/powershell-select-string-find-text-in-files-fast-3ll2</guid>
      <description>&lt;p&gt;The PowerShell &lt;strong&gt;Select-String&lt;/strong&gt; cmdlet finds text inside files — the same job &lt;code&gt;grep&lt;/code&gt; does on Linux/macOS and &lt;code&gt;findstr&lt;/code&gt; does in classic CMD. When you are hunting for an error code in logs, checking whether a config key exists, or scanning a repo for a TODO, it is faster than opening every file by hand.&lt;/p&gt;

&lt;p&gt;For the official reference, see Microsoft Learn’s &lt;a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string" rel="noopener noreferrer"&gt;Select-String&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Want to practice PowerShell in a live browser terminal (no install)? Try the free interactive lessons on &lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master — PowerShell and command-line training&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does Select-String do?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\notes.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TODO"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That prints every line in &lt;code&gt;notes.txt&lt;/code&gt; that contains &lt;code&gt;TODO&lt;/code&gt;, plus the file name and line number. Matches are case-&lt;strong&gt;in&lt;/strong&gt;sensitive by default on Windows PowerShell 5.1; add &lt;code&gt;-CaseSensitive&lt;/code&gt; when case matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Search one file or many
&lt;/h2&gt;

&lt;p&gt;Point &lt;code&gt;-Path&lt;/code&gt; at a single file, a wildcard, or a list:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app.log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ERROR"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"timeout"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\config.json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\settings.json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"apiKey"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Preview what you will search with &lt;code&gt;Get-ChildItem&lt;/code&gt; first when the wildcard is broad:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Exception"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Recurse into folders: -Recurse
&lt;/h2&gt;

&lt;p&gt;To walk a directory tree, combine a path with &lt;code&gt;-Recurse&lt;/code&gt; (or pipe files in):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\logs\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FATAL"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Recurse&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or pipe from &lt;code&gt;Get-ChildItem&lt;/code&gt; for tighter filters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Filter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Recurse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Write-Host"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Piping is often clearer when you want to exclude folders, filter by extension, or skip huge binary files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Patterns: simple text and regex
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;-Pattern&lt;/code&gt; accepts a string or a regular expression:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# literal-ish search (still regex — escape special characters)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\readme.md&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\\Windows"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# regex: lines that look like IPv4 addresses&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\access.log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'\d{1,3}(\.\d{1,3}){3}'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To treat the pattern as &lt;strong&gt;plain text&lt;/strong&gt; (no regex), use &lt;code&gt;-SimpleMatch&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\notes.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\temp\file[1].txt"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-SimpleMatch&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Show surrounding lines: -Context
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;-Context&lt;/code&gt; shows lines before and after each match — perfect for log forensics:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 2 lines before, 3 lines after&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app.log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NullReference"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also pass a single number for the same count on both sides: &lt;code&gt;-Context 2&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  List only matching files
&lt;/h2&gt;

&lt;p&gt;Sometimes you care &lt;em&gt;which&lt;/em&gt; files contain a string, not every hit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ConnectionString"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-List&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-List&lt;/code&gt; stops after the first match in each file, which is faster on large trees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case, invert, and quiet checks
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# case-sensitive&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\code.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Error"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-CaseSensitive&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# lines that do NOT match&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\hosts.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^#"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-NotMatch&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In scripts, test whether anything matched with the boolean result of a capture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$hits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app.log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FATAL"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Quiet&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$hits&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Write-Host&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Found FATAL entries — investigate."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-Quiet&lt;/code&gt; returns &lt;code&gt;$true&lt;/code&gt; / &lt;code&gt;$false&lt;/code&gt; instead of match objects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Select-String vs findstr vs Get-Content
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Select-String&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PowerShell pipelines, regex, recursion, rich match objects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;findstr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quick CMD one-liners without loading PowerShell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;Get-Content&lt;/code&gt; + &lt;code&gt;Where-Object&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;When you already have content in memory and need custom filters&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Prefer &lt;strong&gt;Select-String&lt;/strong&gt; when you are already in PowerShell. Prefer &lt;strong&gt;findstr&lt;/strong&gt; only for tiny CMD scripts that must stay &lt;code&gt;.bat&lt;/code&gt;-only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safe habits
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Narrow the path&lt;/strong&gt; before a recursive search — start with &lt;code&gt;Get-ChildItem&lt;/code&gt;, then pipe.&lt;/li&gt;
&lt;li&gt;Prefer &lt;strong&gt;&lt;code&gt;-SimpleMatch&lt;/code&gt;&lt;/strong&gt; when the pattern includes brackets, dots, or backslashes you did not mean as regex.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;-Context&lt;/code&gt;&lt;/strong&gt; on production logs so you see the failure, not just the keyword.&lt;/li&gt;
&lt;li&gt;Avoid searching huge binary folders (&lt;code&gt;node_modules&lt;/code&gt;, &lt;code&gt;.git&lt;/code&gt;) unless you filter them out.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Practice it live
&lt;/h2&gt;

&lt;p&gt;Open a free PowerShell lesson on &lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master’s interactive CLI platform&lt;/a&gt; and try &lt;code&gt;Select-String&lt;/code&gt; in a real terminal in your browser — no VM, no install.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick cheat sheet
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\file.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ERROR"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Recurse&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\app.log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FAIL"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="nf"&gt;ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TODO"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-List&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\data.csv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"id,name"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-SimpleMatch&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once this clicks, pair it with &lt;code&gt;Get-ChildItem&lt;/code&gt; for discovery and &lt;code&gt;Get-Content&lt;/code&gt; when you need the full file after a hit. That trio covers most day-to-day text hunting on Windows.&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>scripting</category>
      <category>windows</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Windows DEL Command: Delete Files Safely From CMD</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Wed, 16 Sep 2026 07:26:03 +0000</pubDate>
      <link>https://dev.to/arnostorg/windows-del-command-delete-files-safely-from-cmd-2nea</link>
      <guid>https://dev.to/arnostorg/windows-del-command-delete-files-safely-from-cmd-2nea</guid>
      <description>&lt;p&gt;The Windows &lt;strong&gt;DEL command&lt;/strong&gt; (also known as &lt;strong&gt;ERASE&lt;/strong&gt;) removes one or more files from Command Prompt. When you are cleaning temp folders, pruning build artifacts, or wiping test outputs, it is faster — and more scriptable — than clicking through File Explorer. Used carelessly, it is also one of the easiest ways to lose work. This guide focuses on safe patterns first.&lt;/p&gt;

&lt;p&gt;For the official reference, see Microsoft Learn’s &lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/del" rel="noopener noreferrer"&gt;del command&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does DEL do?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="kd"&gt;notes&lt;/span&gt;.tmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That deletes &lt;code&gt;notes.tmp&lt;/code&gt; from the &lt;strong&gt;current directory&lt;/strong&gt;. Relative paths resolve from where you are now. Confirm that with &lt;code&gt;cd&lt;/code&gt; before you delete anything important.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;erase&lt;/code&gt; is the same command with a different name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;erase&lt;/span&gt; &lt;span class="kd"&gt;notes&lt;/span&gt;.tmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Confirm before you delete: /P
&lt;/h2&gt;

&lt;p&gt;The single most important safety flag is &lt;code&gt;/P&lt;/code&gt;. It asks you to confirm &lt;strong&gt;each&lt;/strong&gt; file before removing it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/P &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.tmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CMD prints something like &lt;code&gt;Delete (Y/N)?&lt;/code&gt; for every match. Answer &lt;code&gt;Y&lt;/code&gt; to delete that file, &lt;code&gt;N&lt;/code&gt; to skip it. Use &lt;code&gt;/P&lt;/code&gt; whenever you are not 100% sure the wildcard is right.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quiet mode vs prompts: /Q
&lt;/h2&gt;

&lt;p&gt;By default, deleting a wildcard pattern can trigger a “Are you sure (Y/N)?” prompt. To skip that confirmation (common in scripts):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/Q &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/Q&lt;/code&gt; means quiet. Pair it with a &lt;strong&gt;tight&lt;/strong&gt; wildcard you have already tested with &lt;code&gt;dir&lt;/code&gt; first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;.log
&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/Q &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Never start with &lt;code&gt;/Q&lt;/code&gt; on a broad pattern like &lt;code&gt;*.*&lt;/code&gt; until you have previewed the match list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Force read-only deletes: /F
&lt;/h2&gt;

&lt;p&gt;Read-only files normally refuse to delete. &lt;code&gt;/F&lt;/code&gt; forces removal of read-only attributes and deletes the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/F &lt;/span&gt;&lt;span class="kd"&gt;locked&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Useful for cleaning build caches. Dangerous if you did not mean to touch that file — combine with &lt;code&gt;/P&lt;/code&gt; when exploring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/F /P &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.bak
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Include subfolders: /S
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/S&lt;/code&gt; deletes matching files in the current folder &lt;strong&gt;and every subdirectory&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/S &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.tmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is powerful and easy to overreach. Always preview with &lt;code&gt;dir /S&lt;/code&gt; first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/S &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.tmp
&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/S /P &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.tmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/P&lt;/code&gt; with &lt;code&gt;/S&lt;/code&gt; walks the tree and confirms file by file — slow, but safe while you learn the pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attribute filters: /A
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/A&lt;/code&gt; lets you target files by attributes (hidden, system, read-only, archive, and more). Example — delete only hidden matches:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/A&lt;/span&gt;&lt;span class="nl"&gt;:H&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;.tmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Attribute letters follow the same style as &lt;code&gt;dir /A&lt;/code&gt;. Prefer explicit filters over “delete everything and hope.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful workflows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Preview, then delete
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;.tmp
&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/P &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.tmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Clean a known temp pattern quietly
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/Q &lt;/span&gt;&lt;span class="kd"&gt;C&lt;/span&gt;:\builds\out\&lt;span class="o"&gt;*&lt;/span&gt;.obj
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Wipe read-only leftovers after a failed build
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/F /Q &lt;/span&gt;&lt;span class="kd"&gt;C&lt;/span&gt;:\builds\out\&lt;span class="o"&gt;*&lt;/span&gt;.pdb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Recursive cleanup with confirmation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/S /P &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  DEL vs File Explorer
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Why DEL helps&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Exact patterns&lt;/td&gt;
&lt;td&gt;Wildcards beat hunting files by hand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scripts / automation&lt;/td&gt;
&lt;td&gt;Repeatable cleanup in a &lt;code&gt;.bat&lt;/code&gt; file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Already in a prompt&lt;/td&gt;
&lt;td&gt;No context switch to Explorer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safety prompts&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/P&lt;/code&gt; confirms each match before it goes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Wrong current directory
&lt;/h3&gt;

&lt;p&gt;Relative deletes always resolve from the current directory. If the “wrong” files disappear, check where you are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;
&lt;span class="nb"&gt;dir&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prefer a full path when the stakes are high:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/P &lt;/span&gt;&lt;span class="kd"&gt;C&lt;/span&gt;:\Users\Public\temp\&lt;span class="o"&gt;*&lt;/span&gt;.tmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deleting folders with DEL
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;del&lt;/code&gt; removes &lt;strong&gt;files&lt;/strong&gt;, not directories. Empty folders stay behind. To remove a directory tree, use &lt;code&gt;rmdir&lt;/code&gt; / &lt;code&gt;rd&lt;/code&gt; (often with &lt;code&gt;/S&lt;/code&gt;) after the files are gone — that is a separate command with its own risks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Broad wildcards + quiet mode
&lt;/h3&gt;

&lt;p&gt;This combination is the classic foot-gun:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="na"&gt;/Q &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.&lt;span class="o"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you must clear a folder of files, preview with &lt;code&gt;dir&lt;/code&gt; first, prefer a narrower pattern, and use &lt;code&gt;/P&lt;/code&gt; until the habit sticks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Assuming Recycle Bin
&lt;/h3&gt;

&lt;p&gt;Files removed with &lt;code&gt;del&lt;/code&gt; do &lt;strong&gt;not&lt;/strong&gt; go to the Recycle Bin. Recovery means backups, shadow copies, or undo tools — not Ctrl+Z in Explorer. Treat every delete as permanent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Delete one file&lt;/td&gt;
&lt;td&gt;&lt;code&gt;del file.tmp&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confirm each match&lt;/td&gt;
&lt;td&gt;&lt;code&gt;del /P *.tmp&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quiet (no prompt)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;del /Q *.log&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Force read-only&lt;/td&gt;
&lt;td&gt;&lt;code&gt;del /F locked.txt&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Include subfolders&lt;/td&gt;
&lt;td&gt;&lt;code&gt;del /S *.tmp&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safe recursive cleanup&lt;/td&gt;
&lt;td&gt;&lt;code&gt;del /S /P *.tmp&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same as DEL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;erase notes.tmp&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Practice DEL hands-on
&lt;/h2&gt;

&lt;p&gt;Typing the command a few times sticks better than reading about it — especially the safety flags.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master&lt;/a&gt; is a free online interactive learning platform for the command line. Practice Windows CMD, PowerShell, and Bash in a live browser terminal with instant feedback — no install and no VM. Most lessons are free. For a structured Windows path that covers core commands like &lt;code&gt;DEL&lt;/code&gt;, start the &lt;a href="https://windows-cli.arnost.org/en/windows-cli" rel="noopener noreferrer"&gt;interactive Windows Command Prompt course&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tip: run &lt;code&gt;del /?&lt;/code&gt; once in a real prompt, then practice &lt;code&gt;del /P&lt;/code&gt; on a throwaway &lt;code&gt;*.tmp&lt;/code&gt; folder until the confirm loop feels automatic.&lt;/p&gt;

</description>
      <category>windows</category>
      <category>commandline</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Windows COPY Command: Duplicate Files Fast From CMD</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Mon, 14 Sep 2026 07:26:31 +0000</pubDate>
      <link>https://dev.to/arnostorg/windows-copy-command-duplicate-files-fast-from-cmd-49i9</link>
      <guid>https://dev.to/arnostorg/windows-copy-command-duplicate-files-fast-from-cmd-49i9</guid>
      <description>&lt;p&gt;The Windows &lt;strong&gt;COPY command&lt;/strong&gt; duplicates one or more files from Command Prompt. When you are already in a terminal — staging builds, backing up configs, or moving samples into a project — it is faster than opening File Explorer and dragging files around.&lt;/p&gt;

&lt;p&gt;This guide covers the basics, wildcards, overwrite behavior, useful patterns, and common mistakes. For the official reference, see Microsoft Learn’s &lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/copy" rel="noopener noreferrer"&gt;copy command&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does COPY do?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;notes&lt;/span&gt;.txt &lt;span class="kd"&gt;backup&lt;/span&gt;\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That copies &lt;code&gt;notes.txt&lt;/code&gt; from the &lt;strong&gt;current directory&lt;/strong&gt; into the &lt;code&gt;backup&lt;/code&gt; folder. You can also name the destination file explicitly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;notes&lt;/span&gt;.txt &lt;span class="kd"&gt;backup&lt;/span&gt;\notes&lt;span class="na"&gt;-old&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Relative paths resolve from where you are now. Confirm that with &lt;code&gt;cd&lt;/code&gt; before you copy anything important.&lt;/p&gt;

&lt;h2&gt;
  
  
  Copy into a folder vs rename on copy
&lt;/h2&gt;

&lt;p&gt;If the destination ends with a backslash (or is an existing folder), COPY keeps the original filename:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;report&lt;/span&gt;.csv &lt;span class="kd"&gt;archive&lt;/span&gt;\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the destination is a file path, COPY creates (or overwrites) that exact name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;report&lt;/span&gt;.csv &lt;span class="kd"&gt;archive&lt;/span&gt;\report&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;2026&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;09&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;14&lt;/span&gt;.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Wildcards for batches
&lt;/h2&gt;

&lt;p&gt;Asterisks and question marks let you copy groups of files in one shot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;.txt &lt;span class="kd"&gt;docs&lt;/span&gt;\
&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;data&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;.csv &lt;span class="kd"&gt;staging&lt;/span&gt;\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;*.txt&lt;/code&gt; grabs every text file in the current directory. &lt;code&gt;data?.csv&lt;/code&gt; matches single-character wildcards like &lt;code&gt;data1.csv&lt;/code&gt; and &lt;code&gt;dataA.csv&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overwrite prompts and quiet mode
&lt;/h2&gt;

&lt;p&gt;When the destination file already exists, CMD usually asks before replacing it. To force overwrite without a prompt (handy in scripts):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="na"&gt;/Y &lt;/span&gt;&lt;span class="kd"&gt;source&lt;/span&gt;.txt &lt;span class="kd"&gt;dest&lt;/span&gt;\source.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To always get a prompt even in batch files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; /&lt;span class="na"&gt;-Y &lt;/span&gt;&lt;span class="kd"&gt;source&lt;/span&gt;.txt &lt;span class="kd"&gt;dest&lt;/span&gt;\source.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/Y&lt;/code&gt; is the flag you want for unattended &lt;code&gt;.bat&lt;/code&gt; jobs. Leave the default interactive prompt when you are copying by hand and might overwrite something you care about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful workflows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Backup a config next to the original
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;app&lt;/span&gt;.config &lt;span class="kd"&gt;app&lt;/span&gt;.config.bak
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Stage build outputs into a release folder
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;bin&lt;/span&gt;\Release\&lt;span class="o"&gt;*&lt;/span&gt;.dll &lt;span class="kd"&gt;release&lt;/span&gt;\lib\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Copy then verify the destination
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;readme&lt;/span&gt;.md &lt;span class="kd"&gt;docs&lt;/span&gt;\ &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="kd"&gt;docs&lt;/span&gt;\readme.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; runs &lt;code&gt;dir&lt;/code&gt; only if the copy succeeds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Copy from another drive without changing directory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;D&lt;/span&gt;:\usb\keys.env &lt;span class="kd"&gt;C&lt;/span&gt;:\projects\app\.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  COPY vs File Explorer
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Why COPY helps&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Exact names&lt;/td&gt;
&lt;td&gt;No accidental drag-and-drop into the wrong folder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scripts / automation&lt;/td&gt;
&lt;td&gt;Repeatable file staging in a &lt;code&gt;.bat&lt;/code&gt; file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Already in a prompt&lt;/td&gt;
&lt;td&gt;No context switch to Explorer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wildcards&lt;/td&gt;
&lt;td&gt;One command moves a whole pattern of files&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Destination folder missing
&lt;/h3&gt;

&lt;p&gt;COPY does &lt;strong&gt;not&lt;/strong&gt; create the destination folder for you. If &lt;code&gt;backup&lt;/code&gt; does not exist, create it first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="kd"&gt;backup&lt;/span&gt;
&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;notes&lt;/span&gt;.txt &lt;span class="kd"&gt;backup&lt;/span&gt;\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Copying a folder tree
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;copy&lt;/code&gt; works on &lt;strong&gt;files&lt;/strong&gt;, not whole directory trees. For recursive folder copies, use &lt;code&gt;xcopy&lt;/code&gt; or &lt;code&gt;robocopy&lt;/code&gt; instead. Start with single files and wildcards here; graduate to those tools when you need deep trees.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrong current directory
&lt;/h3&gt;

&lt;p&gt;Relative sources always resolve from the current directory. If the file “isn’t found,” check where you are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;
&lt;span class="nb"&gt;dir&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then retry with a full path if needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;copy&lt;/span&gt; &lt;span class="kd"&gt;C&lt;/span&gt;:\Users\Public\notes.txt &lt;span class="kd"&gt;D&lt;/span&gt;:\backups\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Overwriting without noticing
&lt;/h3&gt;

&lt;p&gt;In scripts, forgotten &lt;code&gt;/Y&lt;/code&gt; can hang on a prompt. In interactive use, an accidental &lt;code&gt;/Y&lt;/code&gt; can silently replace a file. Match the flag to the situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;File into a folder&lt;/td&gt;
&lt;td&gt;&lt;code&gt;copy file.txt dest\&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rename on copy&lt;/td&gt;
&lt;td&gt;&lt;code&gt;copy file.txt dest\new.txt&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All matching files&lt;/td&gt;
&lt;td&gt;&lt;code&gt;copy *.log logs\&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Force overwrite&lt;/td&gt;
&lt;td&gt;&lt;code&gt;copy /Y a.txt b.txt&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt before overwrite&lt;/td&gt;
&lt;td&gt;&lt;code&gt;copy /-Y a.txt b.txt&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copy then check&lt;/td&gt;
&lt;td&gt;&lt;code&gt;copy a.txt b\ &amp;amp;&amp;amp; dir b\a.txt&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Practice COPY hands-on
&lt;/h2&gt;

&lt;p&gt;Typing the command a few times sticks better than reading about it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master&lt;/a&gt; is a free online interactive learning platform for the command line. Practice Windows CMD, PowerShell, and Bash in a live browser terminal with instant feedback — no install and no VM. Most lessons are free. For a structured Windows path that covers core commands like &lt;code&gt;COPY&lt;/code&gt;, start the &lt;a href="https://windows-cli.arnost.org/en/windows-cli" rel="noopener noreferrer"&gt;interactive Windows Command Prompt course&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tip: run &lt;code&gt;copy /?&lt;/code&gt; in a real prompt once, then practice a &lt;code&gt;/Y&lt;/code&gt; backup copy until the overwrite behavior feels obvious.&lt;/p&gt;

</description>
      <category>windows</category>
      <category>commandline</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Windows MKDIR Command: Create Folders Fast From CMD</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Fri, 11 Sep 2026 07:25:25 +0000</pubDate>
      <link>https://dev.to/arnostorg/windows-mkdir-command-create-folders-fast-from-cmd-47c3</link>
      <guid>https://dev.to/arnostorg/windows-mkdir-command-create-folders-fast-from-cmd-47c3</guid>
      <description>&lt;p&gt;The Windows &lt;strong&gt;MKDIR command&lt;/strong&gt; (short alias: &lt;code&gt;md&lt;/code&gt;) creates new folders from Command Prompt. When you are already in a terminal — scripting, fixing a project layout, or setting up a deploy tree — it is faster than opening File Explorer and clicking New Folder.&lt;/p&gt;

&lt;p&gt;This guide covers the basics, nested paths, useful patterns, and common mistakes. For the official reference, see Microsoft Learn’s &lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/mkdir" rel="noopener noreferrer"&gt;mkdir command&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does MKDIR do?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="kd"&gt;projects&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That creates a folder named &lt;code&gt;projects&lt;/code&gt; in the &lt;strong&gt;current directory&lt;/strong&gt;. The short form does the same thing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;md&lt;/span&gt; &lt;span class="kd"&gt;projects&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;mkdir&lt;/code&gt; and &lt;code&gt;md&lt;/code&gt; are interchangeable in CMD.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create nested folders in one shot
&lt;/h2&gt;

&lt;p&gt;On modern Windows, &lt;code&gt;mkdir&lt;/code&gt; creates missing parents automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="kd"&gt;projects&lt;/span&gt;\cli&lt;span class="na"&gt;-tools&lt;/span&gt;\scripts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get &lt;code&gt;projects&lt;/code&gt;, then &lt;code&gt;cli-tools&lt;/code&gt; inside it, then &lt;code&gt;scripts&lt;/code&gt; — without three separate commands.&lt;/p&gt;

&lt;p&gt;If any segment already exists, CMD reuses it and only creates what is missing. That makes nested creates safe to re-run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multiple folders at once
&lt;/h2&gt;

&lt;p&gt;Space-separated names create siblings in the current directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="kd"&gt;docs&lt;/span&gt; &lt;span class="kd"&gt;src&lt;/span&gt; &lt;span class="kd"&gt;tests&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three folders appear side by side: &lt;code&gt;docs&lt;/code&gt;, &lt;code&gt;src&lt;/code&gt;, and &lt;code&gt;tests&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Quoted names work when a folder name has spaces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="s2"&gt;"My Notes"&lt;/span&gt; &lt;span class="s2"&gt;"Raw Data"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Useful workflows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Scaffold a small project tree
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="kd"&gt;app&lt;/span&gt;\src &lt;span class="kd"&gt;app&lt;/span&gt;\tests &lt;span class="kd"&gt;app&lt;/span&gt;\docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create a dated backup folder
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="kd"&gt;backups&lt;/span&gt;\2026&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;09&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;11&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Jump in immediately after creating
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="kd"&gt;reports&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="kd"&gt;reports&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; runs &lt;code&gt;cd&lt;/code&gt; only if &lt;code&gt;mkdir&lt;/code&gt; succeeds.&lt;/p&gt;

&lt;h2&gt;
  
  
  MKDIR vs File Explorer
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Why MKDIR helps&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nested path&lt;/td&gt;
&lt;td&gt;One command builds the whole tree&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scripts / automation&lt;/td&gt;
&lt;td&gt;Repeatable folder layout in a &lt;code&gt;.bat&lt;/code&gt; file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Already in a prompt&lt;/td&gt;
&lt;td&gt;No context switch to Explorer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exact names&lt;/td&gt;
&lt;td&gt;No accidental typos from clicking Rename&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Path not found (older expectation)
&lt;/h3&gt;

&lt;p&gt;People coming from older docs sometimes expect parents to fail. On current Windows CMD, nested &lt;code&gt;mkdir&lt;/code&gt; usually just works. If you still hit a path error, check that the drive/root exists and that you have write permission.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating in the wrong place
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;mkdir&lt;/code&gt; always creates relative to the &lt;strong&gt;current directory&lt;/strong&gt; unless you pass a full path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="kd"&gt;C&lt;/span&gt;:\Users\Public\scratch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm where you are first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Name already exists as a file
&lt;/h3&gt;

&lt;p&gt;If &lt;code&gt;notes&lt;/code&gt; is a file, &lt;code&gt;mkdir notes&lt;/code&gt; fails. Rename or move the file, then retry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;One folder&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mkdir projects&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Short alias&lt;/td&gt;
&lt;td&gt;&lt;code&gt;md projects&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nested path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mkdir a\b\c&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Several siblings&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mkdir docs src tests&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Name with spaces&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mkdir "My Notes"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create then enter&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mkdir reports &amp;amp;&amp;amp; cd reports&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Practice MKDIR hands-on
&lt;/h2&gt;

&lt;p&gt;Typing the command a few times sticks better than reading about it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master&lt;/a&gt; is a free online interactive learning platform for the command line. Practice Windows CMD, PowerShell, and Bash in a live browser terminal with instant feedback — no install and no VM. Most lessons are free. For a structured Windows path that covers core commands like &lt;code&gt;MKDIR&lt;/code&gt;, start the &lt;a href="https://windows-cli.arnost.org/en/windows-cli" rel="noopener noreferrer"&gt;interactive Windows Command Prompt course&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tip: run &lt;code&gt;mkdir /?&lt;/code&gt; in a real prompt once, then practice nested creates until muscle memory takes over.&lt;/p&gt;

</description>
      <category>windows</category>
      <category>commandline</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Windows TREE Command: Map Folders From the Command Line</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Wed, 09 Sep 2026 18:31:49 +0000</pubDate>
      <link>https://dev.to/arnostorg/windows-tree-command-map-folders-from-the-command-line-13db</link>
      <guid>https://dev.to/arnostorg/windows-tree-command-map-folders-from-the-command-line-13db</guid>
      <description>&lt;p&gt;The Windows &lt;strong&gt;TREE command&lt;/strong&gt; prints a folder hierarchy as a text tree. When a project has nested &lt;code&gt;src&lt;/code&gt;, &lt;code&gt;tests&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;, and build output, &lt;code&gt;tree&lt;/code&gt; shows the shape in one glance — no clicking through Explorer windows.&lt;/p&gt;

&lt;p&gt;Microsoft’s reference: &lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/tree" rel="noopener noreferrer"&gt;TREE command&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does TREE do?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;tree&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the current directory, CMD draws every subdirectory using line characters. Folders nest under parents so you can see depth and structure immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful TREE flags
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/f&lt;/code&gt; — include files
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;tree&lt;/span&gt; &lt;span class="na"&gt;/f
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shows folders &lt;strong&gt;and&lt;/strong&gt; files. Perfect for understanding what actually lives in a repo or project folder.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/a&lt;/code&gt; — ASCII characters
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;tree&lt;/span&gt; &lt;span class="na"&gt;/a
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uses plain &lt;code&gt;+--&lt;/code&gt; style characters instead of box-drawing glyphs. Better for logs, older fonts, and copy-paste into chats that mangle Unicode.&lt;/p&gt;

&lt;h3&gt;
  
  
  Point at a path
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;tree&lt;/span&gt; &lt;span class="kd"&gt;C&lt;/span&gt;:\Projects\my&lt;span class="na"&gt;-app /f
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You do not have to &lt;code&gt;cd&lt;/code&gt; first — pass the path as an argument.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical workflows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Map a project before you change it
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="kd"&gt;C&lt;/span&gt;:\Projects\my&lt;span class="na"&gt;-app
&lt;/span&gt;&lt;span class="nb"&gt;tree&lt;/span&gt; &lt;span class="na"&gt;/f
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will spot leftover &lt;code&gt;node_modules&lt;/code&gt;, old &lt;code&gt;dist&lt;/code&gt; folders, or misplaced configs fast.&lt;/p&gt;

&lt;h3&gt;
  
  
  Save a structure snapshot
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;tree&lt;/span&gt; &lt;span class="na"&gt;/f &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;structure&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commit &lt;code&gt;structure.txt&lt;/code&gt; in docs, or attach it to a ticket so others see the layout without cloning yet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep output readable
&lt;/h3&gt;

&lt;p&gt;Huge trees (with &lt;code&gt;node_modules&lt;/code&gt;) are noisy. Either:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="kd"&gt;src&lt;/span&gt;
&lt;span class="nb"&gt;tree&lt;/span&gt; &lt;span class="na"&gt;/f
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or exclude heavy folders by running TREE from a narrower path.&lt;/p&gt;

&lt;h2&gt;
  
  
  TREE vs DIR /s
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Prefer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Visual hierarchy&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;tree&lt;/code&gt; / &lt;code&gt;tree /f&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flat recursive file hunt&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dir /s *.ext&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scriptable name list&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dir /b /s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use &lt;strong&gt;TREE&lt;/strong&gt; to understand shape. Use &lt;strong&gt;DIR&lt;/strong&gt; to find or list specific files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practice folder mapping hands-on
&lt;/h2&gt;

&lt;p&gt;Once you can read a tree dump, navigating and cleaning projects gets easier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master&lt;/a&gt; is a free online interactive learning platform for the command line. Learn Windows CMD, PowerShell, and Bash in a browser terminal with instant feedback — no install required. Most lessons are free; the &lt;a href="https://windows-cli.arnost.org/en/windows-cli" rel="noopener noreferrer"&gt;Windows Command Prompt course&lt;/a&gt; covers core file and folder skills step by step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/tree" rel="noopener noreferrer"&gt;Microsoft Learn: TREE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master — free interactive CLI learning&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>windows</category>
      <category>commandline</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Windows CD Command Explained: Move Through Folders Fast</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Wed, 09 Sep 2026 18:29:50 +0000</pubDate>
      <link>https://dev.to/arnostorg/windows-cd-command-explained-move-through-folders-fast-59aj</link>
      <guid>https://dev.to/arnostorg/windows-cd-command-explained-move-through-folders-fast-59aj</guid>
      <description>&lt;p&gt;The Windows &lt;strong&gt;CD command&lt;/strong&gt; (Change Directory) moves your Command Prompt session into another folder. Almost every CLI workflow starts here: you &lt;code&gt;cd&lt;/code&gt; to the right place, then run &lt;code&gt;dir&lt;/code&gt;, scripts, builds, or tools.&lt;/p&gt;

&lt;p&gt;Official reference: &lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cd" rel="noopener noreferrer"&gt;Microsoft Learn — CD / CHDIR&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does CD do?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="kd"&gt;Documents&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you were in &lt;code&gt;C:\Users\You&lt;/code&gt;, you are now in &lt;code&gt;C:\Users\You\Documents&lt;/code&gt;. The prompt path updates so you always know where you are.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;chdir&lt;/code&gt; is the same command — &lt;code&gt;cd&lt;/code&gt; is the short form everyone uses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Essential CD patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Go up one level
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From &lt;code&gt;C:\Users\You\Documents&lt;/code&gt; you land in &lt;code&gt;C:\Users\You&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Go up two levels:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..\..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Jump to a drive’s root
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; \
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That goes to the root of the &lt;strong&gt;current&lt;/strong&gt; drive (for example &lt;code&gt;C:\&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Switch drives
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;cd&lt;/code&gt; alone does not change the active drive letter the way beginners expect. To work on &lt;code&gt;D:&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;D&lt;/span&gt;:
&lt;span class="nb"&gt;cd&lt;/span&gt; \Projects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or in one step with &lt;code&gt;/d&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="kd"&gt;D&lt;/span&gt;:\Projects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/d&lt;/code&gt; means: change &lt;strong&gt;drive and directory&lt;/strong&gt; together. Memorize this — it saves constant confusion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paths with spaces
&lt;/h3&gt;

&lt;p&gt;Quote them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;"C:\Program Files"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without quotes, CMD splits on the space and fails.&lt;/p&gt;

&lt;h3&gt;
  
  
  Absolute vs relative
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Relative:&lt;/strong&gt; &lt;code&gt;cd Documents&lt;/code&gt; (from where you are)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Absolute:&lt;/strong&gt; &lt;code&gt;cd C:\Users\You\Documents&lt;/code&gt; (full path)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use absolute paths in scripts; relative paths when exploring by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handy navigation tricks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  See where you are
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With no arguments, &lt;code&gt;cd&lt;/code&gt; prints the current directory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tab completion
&lt;/h3&gt;

&lt;p&gt;Type &lt;code&gt;cd Doc&lt;/code&gt; then press &lt;strong&gt;Tab&lt;/strong&gt; — CMD expands matching folder names. Fewer typos, faster moves.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jump back with pushd / popd
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;pushd&lt;/span&gt; &lt;span class="kd"&gt;C&lt;/span&gt;:\Windows\System32
&lt;span class="c"&gt;rem ... do work ...&lt;/span&gt;
&lt;span class="nb"&gt;popd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;pushd&lt;/code&gt; saves your place and moves; &lt;code&gt;popd&lt;/code&gt; returns. Great for quick detours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Enter folder&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cd FolderName&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Up one level&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cd ..&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Drive root&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cd \&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Drive + folder&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cd /d D:\Work&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Path with spaces&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cd "Program Files"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Print location&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cd&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Practice CD until it is automatic
&lt;/h2&gt;

&lt;p&gt;Folder navigation is the foundation of every other command.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master&lt;/a&gt; is a free online interactive learning platform for the command line. Practice Windows CMD, PowerShell, and Bash in a live browser terminal with instant feedback — no install, no VM. Most lessons are free. For a guided Windows path, open the &lt;a href="https://windows-cli.arnost.org/en/windows-cli" rel="noopener noreferrer"&gt;interactive Windows Command Prompt course&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cd" rel="noopener noreferrer"&gt;Microsoft Learn: CD&lt;/a&gt; — official syntax&lt;/li&gt;
&lt;li&gt;&lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master — interactive CLI practice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>windows</category>
      <category>commandline</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What Does the Windows DIR Command Do? 5 Flags Worth Memorizing</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Wed, 09 Sep 2026 18:28:34 +0000</pubDate>
      <link>https://dev.to/arnostorg/what-does-the-windows-dir-command-do-5-flags-worth-memorizing-2bo2</link>
      <guid>https://dev.to/arnostorg/what-does-the-windows-dir-command-do-5-flags-worth-memorizing-2bo2</guid>
      <description>&lt;p&gt;The Windows &lt;strong&gt;DIR command&lt;/strong&gt; lists files and folders in Command Prompt. Used well, it is faster than clicking through File Explorer — especially when you need hidden files, recursive searches, or script-friendly file lists.&lt;/p&gt;

&lt;p&gt;This guide explains what &lt;code&gt;dir&lt;/code&gt; does, then covers five switches worth memorizing. For the official switch list, see Microsoft Learn’s &lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/dir" rel="noopener noreferrer"&gt;DIR command reference&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does DIR do?
&lt;/h2&gt;

&lt;p&gt;Open Command Prompt and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get every file and folder in the &lt;strong&gt;current directory&lt;/strong&gt;: last write time, size (files), and &lt;code&gt;&amp;lt;DIR&amp;gt;&lt;/code&gt; for folders.&lt;/p&gt;

&lt;p&gt;That is the whole job: &lt;strong&gt;inventory the current folder&lt;/strong&gt;. Flags change &lt;em&gt;how&lt;/em&gt; the inventory is shown and filtered.&lt;/p&gt;

&lt;h2&gt;
  
  
  DIR vs File Explorer
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Why DIR helps&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hidden / system files&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/a&lt;/code&gt; surfaces attributes Explorer may hide by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Find &lt;code&gt;*.log&lt;/code&gt; deep in a tree&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/s&lt;/code&gt; recurses without opening every folder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feed a script&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/b&lt;/code&gt; prints bare names — one per line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sort by date or size&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/o:&lt;/code&gt; sorts without clicking column headers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  5 DIR flags worth memorizing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;/w&lt;/code&gt; — wide view
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/w
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Names in columns, less metadata. Fast visual scan of a crowded folder.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;/a&lt;/code&gt; — include attributes (and hidden items)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/a
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without &lt;code&gt;/a&lt;/code&gt;, many hidden and system items stay out of the listing. Narrow it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/a&lt;/span&gt;&lt;span class="nl"&gt;:h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hidden only — useful when a “missing” file is just marked Hidden.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;/s&lt;/code&gt; — search subfolders
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/s &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lists matches in the current folder &lt;strong&gt;and every subfolder&lt;/strong&gt;. Pair with a pattern when you know the name shape but not the path.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;code&gt;/o:&lt;/code&gt; — sort the listing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/o&lt;/span&gt;&lt;span class="nl"&gt;:n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common sort keys:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/o:n&lt;/code&gt; — name&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/o:d&lt;/code&gt; — date (oldest first)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/o:-d&lt;/code&gt; — date (newest first)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/o:s&lt;/code&gt; — size&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;code&gt;/b&lt;/code&gt; — bare format (names only)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/b
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One name per line. No headers. Ideal for scripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/b /s &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.txt &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;file&lt;/span&gt;&lt;span class="na"&gt;-list&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Combine flags (real workflows)
&lt;/h2&gt;

&lt;p&gt;Newest &lt;code&gt;.dll&lt;/code&gt; files under this tree, names only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/b /s /o&lt;/span&gt;:&lt;span class="na"&gt;-d &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;.dll
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything including hidden, sorted by name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="na"&gt;/a /o&lt;/span&gt;&lt;span class="nl"&gt;:n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Clean scan&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dir /w&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Include hidden&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dir /a&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deep pattern search&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dir /s *.ext&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Script-friendly list&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dir /b&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Newest first&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dir /o:-d&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Practice DIR hands-on
&lt;/h2&gt;

&lt;p&gt;Reading flags helps. Typing them until they stick is better.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master&lt;/a&gt; is a free online interactive learning platform for the command line. Practice Windows CMD, PowerShell, and Bash in a live browser terminal with instant feedback — no install and no VM. Most lessons are free. For a structured Windows path that covers core commands like &lt;code&gt;DIR&lt;/code&gt;, start the &lt;a href="https://windows-cli.arnost.org/en/windows-cli" rel="noopener noreferrer"&gt;interactive Windows Command Prompt course&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tip: run &lt;code&gt;dir /?&lt;/code&gt; once in a real prompt to skim Microsoft’s full switch list, then drill the five above until they are muscle memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/dir" rel="noopener noreferrer"&gt;Microsoft Learn: DIR&lt;/a&gt; — complete official syntax and parameters&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://windows-cli.arnost.org/en" rel="noopener noreferrer"&gt;CMD Master — learn CMD interactively&lt;/a&gt; — free browser practice for CMD, PowerShell, and Bash&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>windows</category>
      <category>commandline</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Read Files in PowerShell: Get-Content Explained</title>
      <dc:creator>arnostorg</dc:creator>
      <pubDate>Sat, 25 Apr 2026 08:07:21 +0000</pubDate>
      <link>https://dev.to/arnostorg/read-files-in-powershell-get-content-explained-11</link>
      <guid>https://dev.to/arnostorg/read-files-in-powershell-get-content-explained-11</guid>
      <description>&lt;h1&gt;
  
  
  Read Files in PowerShell: Get-Content Explained
&lt;/h1&gt;

&lt;p&gt;Before running operations on files, read them first to understand what you're working with.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Get-Content reads file contents and displays them. You can read a few lines to preview, or read the entire file. This is your safety check before running operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Read Entire File
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Read complete file contents&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;notes.txt&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Shows everything in the file&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Read First Lines Only
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Preview first 10 lines (safe for big files)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;notes.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-First&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;10&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Useful before operating on large files!&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Read Last Lines Only
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# See most recent entries (like log tail)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logfile.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;5&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Shows last 5 lines - good for log files&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Inspect Configuration Files
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Read config file to understand settings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app-config.txt&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Review before making changes!&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Most Used Options
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;-Path&lt;/strong&gt; - File to read&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;| Select-Object -First 10&lt;/strong&gt; - Show only first 10 lines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;| Select-Object -Last 5&lt;/strong&gt; - Show only last 5 lines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;| Select-Object -Index 0..10&lt;/strong&gt; - Show specific lines&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Trick: Power Usage
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Always preview before operating:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# About to process a file? Read it first!&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;myfile.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-First&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;5&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# See what you're dealing with&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Now safe to run actual operations&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Read logs to diagnose issues:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;error.log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;20&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# See most recent errors&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Helps you understand what went wrong&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Learn It Through Practice
&lt;/h2&gt;

&lt;p&gt;Stop reading and start practicing:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://windows-cli.arnost.org/en/powershell" rel="noopener noreferrer"&gt;Practice on your browser&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The interactive environment lets you type these commands and see real results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part of PowerShell for Beginners
&lt;/h2&gt;

&lt;p&gt;This is part of the &lt;strong&gt;PowerShell for Beginners&lt;/strong&gt; series:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://windows-cli.arnost.org/en/powershell" rel="noopener noreferrer"&gt;Getting Started&lt;/a&gt; - Your first commands&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://windows-cli.arnost.org/en/powershell" rel="noopener noreferrer"&gt;Command Discovery&lt;/a&gt; - Find what exists&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://windows-cli.arnost.org/en/powershell" rel="noopener noreferrer"&gt;Getting Help&lt;/a&gt; - Understand commands&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://windows-cli.arnost.org/en/powershell" rel="noopener noreferrer"&gt;Working with Files&lt;/a&gt; - Copy, move, delete&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://windows-cli.arnost.org/en/powershell" rel="noopener noreferrer"&gt;Filtering Data&lt;/a&gt; - Where-Object and Select-Object&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://windows-cli.arnost.org/en/powershell" rel="noopener noreferrer"&gt;Pipelines&lt;/a&gt; - Chain commands together&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/powershell/" rel="noopener noreferrer"&gt;Official PowerShell Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/training/modules/introduction-to-powershell/" rel="noopener noreferrer"&gt;Microsoft Learn - PowerShell Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;You now understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How this command works&lt;/li&gt;
&lt;li&gt;The most useful options&lt;/li&gt;
&lt;li&gt;One powerful trick&lt;/li&gt;
&lt;li&gt;Where to practice hands-on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice these examples until they're automatic. Mastery comes from repetition.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Practice now:&lt;/strong&gt; Head to the interactive environment and try these commands yourself. That's how PowerShell clicks for you!&lt;/p&gt;

&lt;p&gt;What would you like to master next?&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>windows</category>
      <category>scripting</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
